Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
DateTime==>日付リテラルの変換
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30333#CommentId83283
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
まっさん
 (社会人)
投稿日時
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