投稿者 まっさん  (社会人) 投稿日時 2018/5/26 17:32:19
DateTime==>日付リテラルの変換で以下のような拡張メソッドを作成しました。
ここで時間部分のミリ秒以下の精度について疑問がでました。
以下によると「時刻の値はタイマー刻み、100 ナノ秒単位で測定されます」とあります。
https://msdn.microsoft.com/ja-jp/library/system.datetime(v=vs.110).aspx

100 ナノ秒=1/10000000秒だと思うので、時間の秒の位の小数点以下の精度は7桁になると
思うのですが、DateTime.Millisecondプロパティではミリ秒部分 (0 ~ 999)は3桁しかありません。

100 ナノ秒単位の時間を得るにはどうすればいいですか?
拡張メソッドも、もっと簡潔に書ける方法があれば、教えてください。

    ''' <summary> DateTimeを日付リテラル文字列(#MM/dd/yyyy HH:mm:ss.fff#)に変換</summary>
    ''' <param name="IsDayOnly">日付のみ:True 時間も含める:False[規定値]</param>
    <Runtime.CompilerServices.Extension()>
    Public Function ToStringリテラル(dt As DateTime, Optional IsDayOnly As Boolean = False) As String
        Dim year As String = dt.Year.ToString.PadLeft(4, "0"c)
        Dim month As String = dt.Month.ToString.PadLeft(2, "0"c)
        Dim day As String = dt.Day.ToString.PadLeft(2, "0"c)
        Dim hour As String = dt.Hour.ToString.PadLeft(2, "0"c)
        Dim minute As String = dt.Minute.ToString.PadLeft(2, "0"c)
        Dim second As String = dt.Second.ToString.PadLeft(2, "0"c)
        Dim millisecond As String = dt.Millisecond.ToString.PadLeft(3, "0"c)
        If IsDayOnly Then
            Return String.Format("#{0}/{1}/{2}#", month, day, year)
        Else
            Return String.Format("#{0}/{1}/{2} {3}:{4}:{5}.{6}#", month, day, year, hour, minute, second, millisecond)
            'Return String.Format("#{0}#", dt.ToString("G", CultureInfo.InvariantCulture))
        End If
    End Function

ここまで書いて一旦投稿後、読み返していて気付いたのですが時間と時刻の違いでしょうか?
msdnのURLでは「時刻の値は~」とありますし。。。
以下のようなTimeSpan型の変数を用意すれば秒の位の小数点以下の精度は7桁まで得られました。
でもこれでいいのか自信がありません。
 Dim dts As TimeSpan = dt.TimeOfDay