プログラミングで「午後10時に3時間を足すと1日と2時間」になる問題がついに解決へ!

1 : 2021/05/29(土) 15:03:29.94 ID:MiSuZAgo0

https://www.infoq.com/jp/news/2021/05/Net6-Date-Time/
.NETの基本クラスライブラリの長年の問題は、日付と時刻の値を別々に表すことができない
ことである。.NET 6の一部として、新しいDateOnlyクラスとTimeOnlyクラスは、この過失を
修正しようとするものである。

90年代以降、Windowsプログラマは、日付と時刻の値に関する最適とは言えない言い分に
対処してきた。Visual Basicには、日付、時刻、日付と時刻、期間の値に使われる
Dateクラスのみがあった。これにより、日付コンポーネントしか保持するつもりがなかった値に対して、
時間コンポーネントも取得しようとする場合によく問題が発生した。その逆も同じである。

.NET 1(VB 7)では、Date構造の名前がDateTimeに変更された。
より適切な名前であるが、日付のみの値と日付+時刻の値の両方を表す必要があるという
同じ問題があった。これは、タイムゾーン変換を実行するときに特に問題であった。
DateTime構造に格納されている日付のみの値は、午前1時あるいは午後11時の
時間コンポーネントを簡単に取得できる。後者の場合、1時間のオフセットにより、
日付コンポーネントが前日に変更される。

また、.NET 1には、TimeSpan構造の導入があった。これは期間を保存するように設計された。
しかし、多くの場合、その場しのぎの時間のみの構造として活用されていた。
繰り返すが、この手法には問題があった。

たとえば、午後10時に3時間を追加すると、予想される午前1時ではなく「1日と2時間」になる。

多くの場合、これは、値がデータベースの時間のみの列に挿入されるまで気付かれず、
その結果、オーバーフローエラーが発生する。

以下ソース

2 : 2021/05/29(土) 15:03:54.02 ID:VK3aA4LP0
はい
3 : 2021/05/29(土) 15:05:05.07 ID:mL6P/bo90
任天堂スイッチのやつで説明してくれる?
4 : 2021/05/29(土) 15:06:21.47 ID:zbwKIdXyO
細かいことは気にするな
時間など概念にすぎん
22 : 2021/05/29(土) 15:43:12.60 ID:PDpN9+y80
>>4
今は虚数の時間も扱う時代だから細かいことは気にしない方がいいよね
5 : 2021/05/29(土) 15:07:46.56 ID:ZfV4aHEB0
どんなとき使うんだこれ
6 : 2021/05/29(土) 15:09:29.66 ID:2PTpVD0r0
10+3が26になるの?
7 : 2021/05/29(土) 15:11:28.57 ID:huKgNs9L0
0時と24時が区別できないってこと?
8 : 2021/05/29(土) 15:11:42.20 ID:PCmU27uC0
これ完全な設計ミスに見えるしタイムゾーン気にしなきゃいけない外人の方が嵌りそうなのにこんなクソ仕様を押し通してたのか
12 : 2021/05/29(土) 15:16:07.34 ID:ZfV4aHEB0
>>8
時差問題はDateTimeOffsetでいいんじゃないかな
他の設計ミスってなに?
20 : 2021/05/29(土) 15:39:53.75 ID:PCmU27uC0
>>12
時刻を必要としない場合やその逆の型がない事そのものが設計ミスだろ
23 : 2021/05/29(土) 15:43:14.27 ID:ZfV4aHEB0
>>20
時刻不要は分かるけど日付は分からんな
俺が「時刻だけ保存する永続化」とか知らないからかね
9 : 2021/05/29(土) 15:13:09.69 ID:0+IIJs340
元々24時設定にしておけば良かったのでは?
10 : 2021/05/29(土) 15:13:53.55 ID:0IOyYcKG0
沖縄なら1時間くらいどうってことない
11 : 2021/05/29(土) 15:14:04.97 ID:F8LCtEi60
早稲田予備校の13時の時計みたいな?
13 : 2021/05/29(土) 15:16:53.11 ID:oDTdkMO90
僕の肛門もオーバーフローです
14 : 2021/05/29(土) 15:18:06.22 ID:1Lm+pUlF0
>>13
close 忘れるなよ
15 : 2021/05/29(土) 15:18:14.96 ID:56DvKmMO0
DOSの場合、日付と時刻が別のファンクションコールになってるやつか?
16 : 2021/05/29(土) 15:18:38.36 ID:+VDEodcZ0
excelよりしょぼいの?
17 : 2021/05/29(土) 15:18:58.10 ID:fnVF8l1E0
>たとえば、午後10時に3時間を追加すると、予想される午前1時ではなく「1日と2時間」になる。
なんで1日と1時間にならないんだ…?
18 : 2021/05/29(土) 15:20:22.77 ID:V6ycCcUf0
>たとえば、午後10時に3時間を追加すると、予想される午前1時ではなく「1日と2時間」になる。

.NETなんて汚らしいもの触ったことないから知らないけど、どういうこと?

29 : 2021/05/29(土) 16:06:50.40 ID:9yXVlJp60
>>18
.NETを汚らしいとかいえばプロっぽく聞こえるとか誰かに入れ知恵されたのか?
ただの素人の馬鹿としか思われないと思うよ
19 : 2021/05/29(土) 15:29:49.73 ID:ACwCHpK20
ん? 1日と1時間じゃなくて?
11進数みたいになってるって事か? 意味不明だけど。
21 : 2021/05/29(土) 15:41:48.49 ID:b+5/CttC0
単位の違うものをなんで足すんだ?
24 : 2021/05/29(土) 15:48:48.18 ID:c1vVb/yf0
ソニータイマーで説明してくれないとわかりません
25 : 2021/05/29(土) 16:00:26.21 ID:+v5uk7z50
こんなの一回動かしゃわかる話。
アホ設計者やアホ机上コードレビュワーは文章だけでプログラマーが迷わないよう完璧にしようとムダに時間かける。
そんな設計もレビューも無駄。要求設計と受け入れ試験だけ書いてろ。
26 : 2021/05/29(土) 16:03:13.46 ID:k7wyry1i0
おれが遅刻したのも日帝強占期の35年を引けば予定時刻より遥かに早く到着したといえる
27 : 2021/05/29(土) 16:04:51.90 ID:Mj9KOk8A0
つーかコンマ以下の値を計算するなら表示しろよ
28 : 2021/05/29(土) 16:05:01.48 ID:wuc8l/8L0
誰かガンダムで説明して
31 : 2021/05/29(土) 16:07:30.47 ID:u07dOGjh0
実際に書いてみたら「1.01:00:00」とかいう計算結果になった
訳がわかんねえ
32 : 2021/05/29(土) 16:08:40.84 ID:prOtxGmT0
エクセルは時間の計算苦手だよね

コメント

タイトルとURLをコピーしました