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

1 ::2021/05/29(土) 15:03:29.94 ID:MiSuZAgo0.net ?2BP(2072)
https://img.5ch.net/ico/syobo1.gif
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時間」になる。

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

以下ソース

50 ::2021/05/29(土) 17:49:35.10 ID:V6ycCcUf0.net

>>29
実際.NETなんか知らんから素人の馬鹿で結構だけど、
お前さんが.NETに詳しいなら1日と2時間なんてアホな値になる理由を教えてくれ

77 ::2021/05/29(土) 22:18:29.24 ID:kc8tZ0fw0.net

timespanに午後十時をいれようとするバカの記事
20時間をいれるための箱だ

35 ::2021/05/29(土) 16:24:10.58 ID:oDTdkMO90.net

>>34
計算しているうちに7桁目ぐらいで誤差が出ているときがあるな
単純な計算でも十数桁目以降を0にしているし

30 ::2021/05/29(土) 16:07:14.51 ID:3puMvkvG0.net

>>23
RDBに時刻だけ保存するとか1に書いてある

1の文章見ても何がどうなって時間がずれるのか判らないけどな

日付や時間の型、タイムゾーン、時間の加算操作
辺りがどう関係しているのか判らない

60 ::2021/05/29(土) 18:35:29.50 ID:Ty8KFFsx0.net

.NETしばらく触ってないけどこんな仕様だったのか

66 ::2021/05/29(土) 19:21:47.87 ID:0mJuqt/M0.net

>>65
専門的なことを門外漢に分かりやすく説明できない奴は賢ぶってるだけのバカ

81 ::2021/05/29(土) 23:02:56.06 ID:V6ycCcUf0.net

>>29
おいプロのおっさん、はよ教えてくれよ1日2時間になる理由を

4 ::2021/05/29(土) 15:06:21.47 ID:zbwKIdXyO.net

細かいことは気にするな
時間など概念にすぎん

4 ::2021/05/29(土) 15:06:21.47 ID:zbwKIdXyO.net

細かいことは気にするな
時間など概念にすぎん

8 ::2021/05/29(土) 15:11:42.20 ID:PCmU27uC0.net

これ完全な設計ミスに見えるしタイムゾーン気にしなきゃいけない外人の方が嵌りそうなのにこんなクソ仕様を押し通してたのか

22 ::2021/05/29(土) 15:43:12.60 ID:PDpN9+y80.net

>>4
今は虚数の時間も扱う時代だから細かいことは気にしない方がいいよね

90 ::2021/05/30(日) 16:02:17.59 ID:ff8VrToj0.net

リファレンス読んでわかった気になって、だろう、はずだ、であるべき、で作って一度も通さず本番リリースするのがアホってだけ。

そもそも時間なんて不安定なものは数値で扱うのがどうかしてる。
文字列で渡せばいいんだよ。バカなやり方で結構、間違いさえしなけりゃな。

34 ::2021/05/29(土) 16:15:23.71 ID:bNFpmW9D0.net

>>32
金銭計算も苦手
小数以下の端数の切上げ切捨てで誤差が出がち

58 ::2021/05/29(土) 18:27:46.44 ID:hOhgRaNc0.net

>>55
var okazanuriki = new Date(“2021-05-29 18:28:28”);

44 ::2021/05/29(土) 16:45:00.95 ID:MFPMn27o0.net

2時間はどこから来るんだろう?
使いづらいとかいうレベルの話じゃないよね、それ

39 ::2021/05/29(土) 16:28:15.53 ID:iByU49wu0.net

>>34
ちゃんと10進数型の型を使え

29 ::2021/05/29(土) 16:06:50.40 ID:9yXVlJp60.net

>>18
.NETを汚らしいとかいえばプロっぽく聞こえるとか誰かに入れ知恵されたのか?
ただの素人の馬鹿としか思われないと思うよ

13 ::2021/05/29(土) 15:16:53.11 ID:oDTdkMO90.net

僕の肛門もオーバーフローです

76 ::2021/05/29(土) 22:06:22.01 ID:Y6U49TPT0.net

>>32
整数部は日にち
小数点以下は時間を表す。

1時間は1/24だ。

って知ってるか。

70 ::2021/05/29(土) 20:42:12.47 ID:ZfV4aHEB0.net

>>64
これおかしいか?
https://dotnetfiddle.net/9H9mXv

78 ::2021/05/29(土) 22:23:40.37 ID:AA/fKoou0.net

>>51
昔グーグルのスケジュールかなんかが昼の12時30をpm12:30って表示してて軽くパニックになったわ

43 ::2021/05/29(土) 16:33:54.12 ID:u07dOGjh0.net

でも、1日と2時間なんてことにはならなかったよ
書いた人が1日と1時間って書こうとしたのを間違ったんじゃないの

65 ::2021/05/29(土) 19:03:41.33 ID:4xr0CxMY0.net

datetime構造は、日付のみと、日付時間がごっちゃになってるから
2つの併用ができない。だからdateonly構造とtimeonly構造の2つが追加された。

ということを言ってるだけなのにそれすら読み解けない低学歴揃いがネラー
これでVBをバカにする自称エリート気取ってんだから本当に病が深い

82 ::2021/05/30(日) 00:02:00.43 ID:AbIqQMof0.net

この記事書いた奴が.NET嫌いだっていうだけで
日付と時刻を分離したクラスを実装したっていうだけの話だなこれ

69 ::2021/05/29(土) 19:37:09.21 ID:sRID6rab0.net

サマータイムはサラボーンに勝てるわけが無いだろ

10 ::2021/05/29(土) 15:13:53.55 ID:0IOyYcKG0.net

沖縄なら1時間くらいどうってことない

62 ::2021/05/29(土) 18:49:08.47 ID:pGBd672y0.net

なかticksでねーの

21 ::2021/05/29(土) 15:41:48.49 ID:b+5/CttC0.net

単位の違うものをなんで足すんだ?

91 ::2021/05/30(日) 17:43:21.32 ID:q4lu5w8S0.net

>>90
バカを他人に押し付けるなよ

14 ::2021/05/29(土) 15:18:06.22 ID:1Lm+pUlF0.net

>>13
close 忘れるなよ

5 ::2021/05/29(土) 15:07:46.56 ID:ZfV4aHEB0.net

どんなとき使うんだこれ

36 ::2021/05/29(土) 16:25:59.35 ID:I24xNML80.net

そういや2000年問題んときIT系の会社にいて、とりあえず問題は無いと確認済みだけど数人は24時回るまで会社待機したな

51 ::2021/05/29(土) 17:54:52.29 ID:ZNsNSAJp0.net

メリケンの感覚だと
midnightは12:00 AM
midnightの1分後は0:01 AMではなく12:01 AM
midnightの59分後は12:59 AM
んでmidnightの1時間後は? 1:00 AM

1より小さい0時台の時刻が彼らには存在しない
やつらバカじゃね?

42 ::2021/05/29(土) 16:30:55.54 ID:49U2igBs0.net

眠れない午前二時

71 ::2021/05/29(土) 20:55:16.46 ID:/tjppOPl0.net

>>51
いくらなんでもそれは冗談だよねw
え、ほんと?

92 ::2021/05/30(日) 20:29:55.37 ID:AbIqQMof0.net

>>90
計算できないじゃん

55 ::2021/05/29(土) 18:07:06.00 ID:ZNsNSAJp0.net

1日と2時間3分4秒(1.02:03:04)を表すTimeSpanオブジェクトを作成
Dim ts1 As TimeSpan = TimeSpan.Parse(“1.2:3:4”)

1.2とかバカ過ぎw

7 ::2021/05/29(土) 15:11:28.57 ID:huKgNs9L0.net

0時と24時が区別できないってこと?

27 ::2021/05/29(土) 16:04:51.90 ID:Mj9KOk8A0.net

つーかコンマ以下の値を計算するなら表示しろよ

41 ::2021/05/29(土) 16:30:49.40 ID:8gkFQKXc0.net

32 ::2021/05/29(土) 16:08:40.84 ID:prOtxGmT0.net

エクセルは時間の計算苦手だよね

67 ::2021/05/29(土) 19:27:44.77 ID:Qsgllpr/0.net

サマータイムはtubeだけにしてくれ

6 ::2021/05/29(土) 15:09:29.66 ID:2PTpVD0r0.net

10+3が26になるの?

24 ::2021/05/29(土) 15:48:48.18 ID:c1vVb/yf0.net

ソニータイマーで説明してくれないとわかりません

11 ::2021/05/29(土) 15:14:04.97 ID:F8LCtEi60.net

早稲田予備校の13時の時計みたいな?

87 ::2021/05/30(日) 08:20:16.57 ID:sI/PBpHp0.net

>>86

22+0+1+2
でした

46 ::2021/05/29(土) 17:27:18.46 ID:ZNsNSAJp0.net

人間が常にunixtimeで考えろよ!

59 ::2021/05/29(土) 18:30:06.88 ID:FAEtZgP+0.net

何が何だか分からないw
普通に?間抜けな設計になってても、午後10時に 3時間を足して 1日と 1時間じゃねぇの?
なんで 2時間なんだ。

MS のそっち系のプログラムはエクセルの VBA でマクロをちょと書く程度やなぁ。日付、
時間がからむようなのはないな。

つうかみんなどうしてんの。unixtimeなライブラリ的なものを作る(でラッパーでくるむとか)
とかしたほうが楽な気がするな。

18 ::2021/05/29(土) 15:20:22.77 ID:V6ycCcUf0.net

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

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

68 ::2021/05/29(土) 19:36:52.63 ID:Ge1EOlII0.net

時間の話でしょ?
旧 10+3=1日と2時間
新 10+3=1