投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/5/27 14:45:56
> DateTime==>日付リテラルの変換で以下のような拡張メソッドを作成しました。
「#12/31/2000 12:34:56.789#」 形式の文字列を返す拡張メソッドでしょうか。

DataView の RowFilter プロパティ等では、秒未満のリテラルも指定できますが、
Visual Basic の日付リテラルは秒未満の表現をサポートしていないのでご注意を。
'Dim dt0 As Date = #12/31/2000 12:34:56.789#  'これはエラー 
Dim dt1 As Date = #12/31/2000 12:34:56#
Dim dt2 As Date = #12/31/2018 12:34:56 PM#
Dim dt3 As Date = #2000/12/31 12:34:56#  'VB2015以降のみ 



> DateTime.Millisecondプロパティではミリ秒部分 (0 ~ 999)は3桁しかありません。
文字通りの「ミリ秒」プロパティですので、そうなりますね。

㍉ は基礎となる単位の 10⁻³ 倍 (= 0.001 倍)の量
㌨ は基礎となる単位の 10⁻⁹ 倍 (= 0.000 000 001 倍)の量


> 100 ナノ秒=1/10000000秒だと思うので、時間の秒の位の小数点以下の精度は7桁になると
その認識で正しいです。
たとえば下記のようにすると、秒未満の時刻を 小数点以下 7 桁目まで表示できます。
MsgBox(Now.ToString("ss.fffffff"))
Dim s1 As String = Now.ToString("#MM/dd/yyyy HH:mm:ss.fffffff#")
Dim s2 As String = String.Format("#{0:MM/dd/yyyy HH:mm:ss.fffffff}#", Now)
Dim s3 As String = Now.ToString("\#MM/dd/yyyy HH:mm:ss.fffffff\#", CultureInfo.InvariantCulture)
Dim s4 As String = String.Format(CultureInfo.InvariantCulture, "#{0:MM/dd/yyyy HH:mm:ss.fffffff}#", Now)
Dim s5 As String = $"#{Now:MM/dd/yyyy HH:mm:ss.fffffff}\#"  'VB2015以降 



> 100 ナノ秒単位の精度
その 100 ナノ秒刻みのカウンターが、『Ticks プロパティ』です。

蛇足ですが、DateTime 構造体は 64 bit の符号なし整数型のフィールドで管理されていて、
.NET 1.x まででは、62bit の Ticks 値 + 2 bit の未使用領域、
.NET 2.0 以降では、62bit の Ticks 値 + 2 bit の Kind 値という内部構成です。

ちなみに Kind はタイムゾーンを表す情報なのですが、
.NET 3.5 以降では、時差情報を持った DateTimeOffset 構造体が登場したこともあり、
実際に Kind 部が使われることは殆どありません。


> 100 ナノ秒単位の時間を得るにはどうすればいいですか?
文字列では無く数値として得たいなら、たとえば下記のいずれかを使ってみるとか。
Dim s1 As String = dt.ToString("fffffff"
Dim s2 As String = dt.ToString("ss.fffffff"
Dim nanoSec As Integer = CInt(dt.Ticks Mod 10000000L) * 100
Dim sec As Decimal = ((dt.Ticks Mod 10000000L) / 10000000D) + dt.Second