プログラミングで「午後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時間」になる。

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

以下ソース

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

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

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

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

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

31 ::2021/05/29(土) 16:07:30.47 ID:u07dOGjh0.net

実際に書いてみたら「1.01:00:00」とかいう計算結果になった
訳がわかんねえ

54 ::2021/05/29(土) 18:00:31.73 ID:50IJYAHv0.net

「shachiku」っていう関数を作って、何時間たってもその日扱いにするようにしたらいい
そしたら、28日は30時に退勤、29は7時に出勤って処理も簡単になる

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

56 ::2021/05/29(土) 18:11:24.94 ID:ZNsNSAJp0.net

>>54
それを容れる代わりにNoukiという日付関数も欲しいわ
今月中納品の場合は5月31日過ぎても6月にならず
5月32日、33日とカウントアップしてゆく‥

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

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

75 ::2021/05/29(土) 21:23:06.96 ID:FAEtZgP+0.net

>>64
>>1 とソースにある、

> また、.NET 1には、TimeSpan構造の導入があった。これは期間を保存するように設計された。
> しかし、多くの場合、その場しのぎの時間のみの構造として活用されていた。
> 繰り返すが、この手法には問題があった。
>たとえば、午後10時に3時間を追加すると、予想される午前1時ではなく「1日と2時間」になる。

の部分やろ。

午後10時=0日と22時間 に 3時間=0日と3時間 を加算すると 1日と1時間 になるはずが、
.NET 1 の TimeSpan構造は 1日と2時間 になるってことか?
それとも、この前段にあるタイムゾーン変換でオフセット1時間云々が効いてくるってこと?
DSTまたぎが前提の内容とか?

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

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

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

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

3 ::2021/05/29(土) 15:05:05.07 ID:mL6P/bo90.net

任天堂スイッチのやつで説明してくれる?

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

眠れない午前二時

26 ::2021/05/29(土) 16:03:13.46 ID:k7wyry1i0.net

おれが遅刻したのも日帝強占期の35年を引けば予定時刻より遥かに早く到着したといえる

53 ::2021/05/29(土) 17:55:49.33 ID:ZfV4aHEB0.net

>>50
日常的に.NET使ってる俺でもこの記事が何を言ってるか分からんw
そもそも「時刻だけ」の概念が無いって書いてあるのに
「午後10時」っていうオブジェクトがある前提になっちゃってるよね

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

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

74 ::2021/05/29(土) 21:20:34.31 ID:LU8tsUbX0.net

>>48
そして
01/05/21が
DD/MM/YYなのか
MM/DD/YYなのか
分からずハマるパターン

20 ::2021/05/29(土) 15:39:53.75 ID:PCmU27uC0.net

>>12
時刻を必要としない場合やその逆の型がない事そのものが設計ミスだろ

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

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

37 ::2021/05/29(土) 16:27:24.18 ID:QuFAZxJJ0.net

>>5
デリヘルの時間が狂うと料金も変わる

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

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

72 ::2021/05/29(土) 21:13:43.54 ID:P1eSsyQv0.net

さっぱりわかんねえ
どういう計算なんじゃろ

45 ::2021/05/29(土) 16:51:37.38 ID:blIbDajg0.net

今ザマリン生きてる?

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

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

12 ::2021/05/29(土) 15:16:07.34 ID:ZfV4aHEB0.net

>>8
時差問題はDateTimeOffsetでいいんじゃないかな
他の設計ミスってなに?

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
計算できないじゃん

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

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

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

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

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

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

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

1時間は1/24だ。

って知ってるか。

16 ::2021/05/29(土) 15:18:38.36 ID:+VDEodcZ0.net

excelよりしょぼいの?

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

なかticksでねーの

15 ::2021/05/29(土) 15:18:14.96 ID:56DvKmMO0.net

DOSの場合、日付と時刻が別のファンクションコールになってるやつか?

2 ::2021/05/29(土) 15:03:54.02 ID:VK3aA4LP0.net

はい

84 ::2021/05/30(日) 00:22:29.99 ID:Yxc898ba0.net

GPSの日が7168日戻るせいで古い端末が使えなくなったのは知られてないな
現在位置を知るだけなら問題ないもんな

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

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

61 ::2021/05/29(土) 18:45:01.53 ID:ZfV4aHEB0.net

わからんなあ
普通に次の日の01:00になるけどなあ

https://dotnetfiddle.net/O0m99O

85 ::2021/05/30(日) 08:08:54.52 ID:q4lu5w8S0.net

timespanは時間間隔を入れるもので、時刻を入れるのはdatetimeだろ
そのへん理解出来てない
datetime型の午後10時にtimespan型の3時間を足せばいい

33 ::2021/05/29(土) 16:11:53.53 ID:sRID6rab0.net

N88-BASICだとどうなるの?

17 ::2021/05/29(土) 15:18:58.10 ID:fnVF8l1E0.net

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

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

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

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

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

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

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

86 ::2021/05/30(日) 08:19:33.75 ID:sI/PBpHp0.net

23+0+1+2
って事?

52 ::2021/05/29(土) 17:55:20.78 ID:A7y71s1/0.net

深夜0時が12時24時0時の3つで認識されてるからだろ

49 ::2021/05/29(土) 17:47:58.68 ID:qxh1tzgX0.net

タイムリープものか

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

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

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

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

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

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

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

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

80 ::2021/05/29(土) 22:56:34.32 ID:XBbC4/bt0.net

time_t を使えば、秒単位で足りる用途なら、全部解決。

ただ、ちょっと使い方が難しいので、プロ未満のITドカタには無理。

79 ::2021/05/29(土) 22:42:56.92 ID:EAWZkzKC0.net

普通UNIX歴に治すよね?

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

>>86

22+0+1+2
でした

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

どんなとき使うんだこれ

88 ::2021/05/30(日) 08:22:02.16 ID:sI/PBpHp0.net

>>87

> >>86

22+1+0+1
でした

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

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

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

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

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

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

19 ::2021/05/29(土) 15:29:49.73 ID:ACwCHpK20.net

ん? 1日と1時間じゃなくて?
11進数みたいになってるって事か? 意味不明だけど。

40 ::2021/05/29(土) 16:30:45.63 ID:Fpof/7+40.net

>>9
文系はひっこんでろな

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

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

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

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

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

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

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

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

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

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください




RSS


%d