DOBON.NETプログラミング道掲示板

■35449 / 親記事)  Excelの数値 -> 日付みたいな関数?
  
□投稿者/ はな 一般人(1回)-(2023/06/11(Sun) 22:08:57)
  • アイコン環境/言語:[Windows10 .NET 6.0] 
    分類:[.NET] 

    毎度お世話になります。

    Excelで数値:0.020833 を セルの初期設定を(hh:mm)にすると「00:30:00」に
    なりますよね?
    これをC#でしたいのですが、TimeSpanを使用しても思うようにできません

    初歩的なことで申し訳ありませんが、ご指導願えませんでしょうか。


マルチポストを報告
違反を報告
引用返信 削除キー/
■35450 / ResNo.1)  Re[1]: Excelの数値 -> 日付みたいな関数?
□投稿者/ Hongliang 大御所(642回)-(2023/06/12(Mon) 08:47:46)
  • アイコンDateTime.FromOADate(Double)
    で、1899/12/30からの経過日数をDateTime型に変換できます。
    ほぼExcelと同等ですが、61未満の間は日付にズレが生じます(Excelだと0が1900/1/0、60が1900/2/29という存在しない日付になります)。時刻部分は変わりません。
    // あとExcelには1904年から計算するというオプションもあるみたいですが…。

    そこからTimeSpanを取り出すには、以下のようにします。
    TimeSpan span = DateTime.FromOADate(...) - new DateTime(1899, 12, 30);

    あと、30分を意味する 1/48 は循環小数なので厳密には 0.020833333333... と3が無限に続きます。
    0.020833だと00:29:59.971...となって、
    Excelだとミリ秒以下を四捨五入して0:30:00と表示されますが、
    DateTime.FromOADateはミリ秒まで計算して29分59秒971扱いになります。
    DateTime.FromOADateに渡す値として0.02083333まで桁を伸ばすと正確な30分に変換されます。
違反を報告
引用返信 削除キー/
■35456 / ResNo.2)  Re[2]: Excelの数値 -> 日付みたいな関数?
□投稿者/ はな 一般人(2回)-(2023/06/12(Mon) 21:53:40)
  • アイコンNo35450に返信(Hongliangさんの記事)

    なるほど!できました。ありがとうございました。
解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -