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

ツリー一括表示

Nomalアイコン Excelの数値 -> 日付みたいな関数? /はな (23/06/11(Sun) 22:08) #35449
Nomalアイコン Re[1]: Excelの数値 -> 日付みたいな関数? /Hongliang (23/06/12(Mon) 08:47) #35450
  └Nomalアイコン Re[2]: Excelの数値 -> 日付みたいな関数? /はな (23/06/12(Mon) 21:53) #35456 解決み!


親記事 / ▼[ 35450 ]
■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を使用しても思うようにできません

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


違反を報告
[ □ Tree ] 返信 削除キー/

▲[ 35449 ] / ▼[ 35456 ]
■35450 / 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分に変換されます。
違反を報告
[ 親 35449 / □ Tree ] 返信 削除キー/

▲[ 35450 ] / 返信無し
■35456 / 2階層)  Re[2]: Excelの数値 -> 日付みたいな関数?
□投稿者/ はな 一般人(2回)-(2023/06/12(Mon) 21:53:40)
  • アイコンNo35450に返信(Hongliangさんの記事)

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


Mode/  Pass/


- Child Tree -