2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

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

以下ソース

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

3 ::2021/05/29(土) 15:05:05.07 ID:mL6P/bo90.net
任天堂スイッチのやつで説明してくれる?

4 ::2021/05/29(土) 15:06:21.47 ID:zbwKIdXyO.net
細かいことは気にするな
時間など概念にすぎん

5 ::2021/05/29(土) 15:07:46.56 ID:ZfV4aHEB0.net
どんなとき使うんだこれ

6 ::2021/05/29(土) 15:09:29.66 ID:2PTpVD0r0.net
10+3が26になるの?

7 ::2021/05/29(土) 15:11:28.57 ID:huKgNs9L0.net
0時と24時が区別できないってこと?

8 ::2021/05/29(土) 15:11:42.20 ID:PCmU27uC0.net
これ完全な設計ミスに見えるしタイムゾーン気にしなきゃいけない外人の方が嵌りそうなのにこんなクソ仕様を押し通してたのか

9 ::2021/05/29(土) 15:13:09.69 ID:0+IIJs340.net
元々24時設定にしておけば良かったのでは?

10 ::2021/05/29(土) 15:13:53.55 ID:0IOyYcKG0.net
沖縄なら1時間くらいどうってことない

11 ::2021/05/29(土) 15:14:04.97 ID:F8LCtEi60.net
早稲田予備校の13時の時計みたいな?

12 ::2021/05/29(土) 15:16:07.34 ID:ZfV4aHEB0.net
>>8
時差問題はDateTimeOffsetでいいんじゃないかな
他の設計ミスってなに?

13 ::2021/05/29(土) 15:16:53.11 ID:oDTdkMO90.net
僕の肛門もオーバーフローです

14 ::2021/05/29(土) 15:18:06.22 ID:1Lm+pUlF0.net
>>13
close 忘れるなよ

15 ::2021/05/29(土) 15:18:14.96 ID:56DvKmMO0.net
DOSの場合、日付と時刻が別のファンクションコールになってるやつか?

16 ::2021/05/29(土) 15:18:38.36 ID:+VDEodcZ0.net
excelよりしょぼいの?

17 ::2021/05/29(土) 15:18:58.10 ID:fnVF8l1E0.net
>たとえば、午後10時に3時間を追加すると、予想される午前1時ではなく「1日と2時間」になる。
なんで1日と1時間にならないんだ…?

18 ::2021/05/29(土) 15:20:22.77 ID:V6ycCcUf0.net
>たとえば、午後10時に3時間を追加すると、予想される午前1時ではなく「1日と2時間」になる。

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

19 ::2021/05/29(土) 15:29:49.73 ID:ACwCHpK20.net
ん? 1日と1時間じゃなくて?
11進数みたいになってるって事か? 意味不明だけど。

20 ::2021/05/29(土) 15:39:53.75 ID:PCmU27uC0.net
>>12
時刻を必要としない場合やその逆の型がない事そのものが設計ミスだろ

21 ::2021/05/29(土) 15:41:48.49 ID:b+5/CttC0.net
単位の違うものをなんで足すんだ?

22 ::2021/05/29(土) 15:43:12.60 ID:PDpN9+y80.net
>>4
今は虚数の時間も扱う時代だから細かいことは気にしない方がいいよね

23 ::2021/05/29(土) 15:43:14.27 ID:ZfV4aHEB0.net
>>20
時刻不要は分かるけど日付は分からんな
俺が「時刻だけ保存する永続化」とか知らないからかね

24 ::2021/05/29(土) 15:48:48.18 ID:c1vVb/yf0.net
ソニータイマーで説明してくれないとわかりません

25 ::2021/05/29(土) 16:00:26.21 ID:+v5uk7z50.net
こんなの一回動かしゃわかる話。
アホ設計者やアホ机上コードレビュワーは文章だけでプログラマーが迷わないよう完璧にしようとムダに時間かける。
そんな設計もレビューも無駄。要求設計と受け入れ試験だけ書いてろ。

26 ::2021/05/29(土) 16:03:13.46 ID:k7wyry1i0.net
おれが遅刻したのも日帝強占期の35年を引けば予定時刻より遥かに早く到着したといえる

27 ::2021/05/29(土) 16:04:51.90 ID:Mj9KOk8A0.net
つーかコンマ以下の値を計算するなら表示しろよ

28 ::2021/05/29(土) 16:05:01.48 ID:wuc8l/8L0.net
誰かガンダムで説明して

29 ::2021/05/29(土) 16:06:50.40 ID:9yXVlJp60.net
>>18
.NETを汚らしいとかいえばプロっぽく聞こえるとか誰かに入れ知恵されたのか?
ただの素人の馬鹿としか思われないと思うよ

30 ::2021/05/29(土) 16:07:14.51 ID:3puMvkvG0.net
>>23
RDBに時刻だけ保存するとか1に書いてある

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

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

31 ::2021/05/29(土) 16:07:30.47 ID:u07dOGjh0.net
実際に書いてみたら「1.01:00:00」とかいう計算結果になった
訳がわかんねえ

32 ::2021/05/29(土) 16:08:40.84 ID:prOtxGmT0.net
エクセルは時間の計算苦手だよね

33 ::2021/05/29(土) 16:11:53.53 ID:sRID6rab0.net
N88-BASICだとどうなるの?

34 ::2021/05/29(土) 16:15:23.71 ID:bNFpmW9D0.net
>>32
金銭計算も苦手
小数以下の端数の切上げ切捨てで誤差が出がち

35 ::2021/05/29(土) 16:24:10.58 ID:oDTdkMO90.net
>>34
計算しているうちに7桁目ぐらいで誤差が出ているときがあるな
単純な計算でも十数桁目以降を0にしているし

36 ::2021/05/29(土) 16:25:59.35 ID:I24xNML80.net
そういや2000年問題んときIT系の会社にいて、とりあえず問題は無いと確認済みだけど数人は24時回るまで会社待機したな

37 ::2021/05/29(土) 16:27:24.18 ID:QuFAZxJJ0.net
>>5
デリヘルの時間が狂うと料金も変わる

38 ::2021/05/29(土) 16:27:28.50 ID:iByU49wu0.net
10年は夢のよう
100年は夢また夢
1000年は一瞬の光の矢

39 ::2021/05/29(土) 16:28:15.53 ID:iByU49wu0.net
>>34
ちゃんと10進数型の型を使え

40 ::2021/05/29(土) 16:30:45.63 ID:Fpof/7+40.net
>>9
文系はひっこんでろな

41 ::2021/05/29(土) 16:30:49.40 ID:8gkFQKXc0.net
>>3
https://p2y.jp/programming-software-for-nintendo-switch-game-builder-garage-released-on-june-11-2021/
これ?

42 ::2021/05/29(土) 16:30:55.54 ID:49U2igBs0.net
眠れない午前二時

43 ::2021/05/29(土) 16:33:54.12 ID:u07dOGjh0.net
でも、1日と2時間なんてことにはならなかったよ
書いた人が1日と1時間って書こうとしたのを間違ったんじゃないの

44 ::2021/05/29(土) 16:45:00.95 ID:MFPMn27o0.net
2時間はどこから来るんだろう?
使いづらいとかいうレベルの話じゃないよね、それ

45 ::2021/05/29(土) 16:51:37.38 ID:blIbDajg0.net
今ザマリン生きてる?

46 ::2021/05/29(土) 17:27:18.46 ID:ZNsNSAJp0.net
人間が常にunixtimeで考えろよ!

47 ::2021/05/29(土) 17:32:40.76 ID:GOwI/bid0.net
時刻と期間を混同してるってこと?
なんかよく分からねえ

48 ::2021/05/29(土) 17:43:16.13 ID:ZNsNSAJp0.net
欧米どもの日時表記感覚はつくづくコンピューターの時代に向いてないよな

2021/05/29 17:40:00  ←この日時表記が文化的に受け入れられない

May 29th Sat., 21 5:40:00 AM ←こいうのじゃないと受け付けない

やれ月を数字で書くのは野蛮だの、
24時間表記はミリタリーtimeだからだの、
いろいろ言い訳ばかり

一方、シナさんは曜日すら数字で表すから合理的
月曜→星期一 火曜→星期ニ 水曜→星期三‥

49 ::2021/05/29(土) 17:47:58.68 ID:qxh1tzgX0.net
タイムリープものか

50 ::2021/05/29(土) 17:49:35.10 ID:V6ycCcUf0.net
>>29
実際.NETなんか知らんから素人の馬鹿で結構だけど、
お前さんが.NETに詳しいなら1日と2時間なんてアホな値になる理由を教えてくれ

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時台の時刻が彼らには存在しない
やつらバカじゃね?

52 ::2021/05/29(土) 17:55:20.78 ID:A7y71s1/0.net
深夜0時が12時24時0時の3つで認識されてるからだろ

53 ::2021/05/29(土) 17:55:49.33 ID:ZfV4aHEB0.net
>>50
日常的に.NET使ってる俺でもこの記事が何を言ってるか分からんw
そもそも「時刻だけ」の概念が無いって書いてあるのに
「午後10時」っていうオブジェクトがある前提になっちゃってるよね

54 ::2021/05/29(土) 18:00:31.73 ID:50IJYAHv0.net
「shachiku」っていう関数を作って、何時間たってもその日扱いにするようにしたらいい
そしたら、28日は30時に退勤、29は7時に出勤って処理も簡単になる

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

56 ::2021/05/29(土) 18:11:24.94 ID:ZNsNSAJp0.net
>>54
それを容れる代わりにNoukiという日付関数も欲しいわ
今月中納品の場合は5月31日過ぎても6月にならず
5月32日、33日とカウントアップしてゆく‥

57 ::2021/05/29(土) 18:23:19.37 ID:yFOzCW7f0.net
// js
var omaTS = new Date().getFullYear();
if(omaTS==1622219194545) var otiTS = omaTS-otiTS;

58 ::2021/05/29(土) 18:27:46.44 ID:hOhgRaNc0.net
>>55
var okazanuriki = new Date("2021-05-29 18:28:28");

59 ::2021/05/29(土) 18:30:06.88 ID:FAEtZgP+0.net
何が何だか分からないw
普通に?間抜けな設計になってても、午後10時に 3時間を足して 1日と 1時間じゃねぇの?
なんで 2時間なんだ。

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

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

60 ::2021/05/29(土) 18:35:29.50 ID:Ty8KFFsx0.net
.NETしばらく触ってないけどこんな仕様だったのか

61 ::2021/05/29(土) 18:45:01.53 ID:ZfV4aHEB0.net
わからんなあ
普通に次の日の01:00になるけどなあ

https://dotnetfiddle.net/O0m99O

62 ::2021/05/29(土) 18:49:08.47 ID:pGBd672y0.net
なかticksでねーの

63 ::2021/05/29(土) 18:56:58.87 ID:5EcCLisn0.net
>>48
ISO標準はわかりやすい順番なのに
どうして準拠しないんだろうかね?

64 ::2021/05/29(土) 18:57:50.30 ID:4xr0CxMY0.net
>>59
datetimeクラスがおかしいという話じゃなくて、時間を加減するときのTimeSpanがおかしいという話。
つか、VBをバカにする自称エリートプログラマ揃いのネラーさんは
>>1の記事の内容も読めないやつばかりでうんざりするな。

65 ::2021/05/29(土) 19:03:41.33 ID:4xr0CxMY0.net
datetime構造は、日付のみと、日付時間がごっちゃになってるから
2つの併用ができない。だからdateonly構造とtimeonly構造の2つが追加された。

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

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だけにしてくれ

68 ::2021/05/29(土) 19:36:52.63 ID:Ge1EOlII0.net
時間の話でしょ?
旧 10+3=1日と2時間
新 10+3=1

69 ::2021/05/29(土) 19:37:09.21 ID:sRID6rab0.net
サマータイムはサラボーンに勝てるわけが無いだろ

70 ::2021/05/29(土) 20:42:12.47 ID:ZfV4aHEB0.net
>>64
これおかしいか?
https://dotnetfiddle.net/9H9mXv

71 ::2021/05/29(土) 20:55:16.46 ID:/tjppOPl0.net
>>51
いくらなんでもそれは冗談だよねw
え、ほんと?

72 ::2021/05/29(土) 21:13:43.54 ID:P1eSsyQv0.net
さっぱりわかんねえ
どういう計算なんじゃろ

73 ::2021/05/29(土) 21:18:22.46 ID:4xr0CxMY0.net
>>70
元の記事の「一日と二時間」は多分タイプミスで
「一日と一時間」が正しいと思う。んで、エクセル上で「午前一時」と入力してほしいときに
「一日と一時間」って入ってしまうとデータ処理に問題が出てくるよね。

74 ::2021/05/29(土) 21:20:34.31 ID:LU8tsUbX0.net
>>48
そして
01/05/21が
DD/MM/YYなのか
MM/DD/YYなのか
分からずハマるパターン

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またぎが前提の内容とか?

76 ::2021/05/29(土) 22:06:22.01 ID:Y6U49TPT0.net
>>32
整数部は日にち
小数点以下は時間を表す。

1時間は1/24だ。

って知ってるか。

77 ::2021/05/29(土) 22:18:29.24 ID:kc8tZ0fw0.net
timespanに午後十時をいれようとするバカの記事
20時間をいれるための箱だ

78 ::2021/05/29(土) 22:23:40.37 ID:AA/fKoou0.net
>>51
昔グーグルのスケジュールかなんかが昼の12時30をpm12:30って表示してて軽くパニックになったわ

79 ::2021/05/29(土) 22:42:56.92 ID:EAWZkzKC0.net
普通UNIX歴に治すよね?

80 ::2021/05/29(土) 22:56:34.32 ID:XBbC4/bt0.net
time_t を使えば、秒単位で足りる用途なら、全部解決。

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

81 ::2021/05/29(土) 23:02:56.06 ID:V6ycCcUf0.net
>>29
おいプロのおっさん、はよ教えてくれよ1日2時間になる理由を

82 ::2021/05/30(日) 00:02:00.43 ID:AbIqQMof0.net
この記事書いた奴が.NET嫌いだっていうだけで
日付と時刻を分離したクラスを実装したっていうだけの話だなこれ

83 ::2021/05/30(日) 00:19:33.15 ID:O6kPs5qg0.net
UNIX time使え

84 ::2021/05/30(日) 00:22:29.99 ID:Yxc898ba0.net
GPSの日が7168日戻るせいで古い端末が使えなくなったのは知られてないな
現在位置を知るだけなら問題ないもんな

85 ::2021/05/30(日) 08:08:54.52 ID:q4lu5w8S0.net
timespanは時間間隔を入れるもので、時刻を入れるのはdatetimeだろ
そのへん理解出来てない
datetime型の午後10時にtimespan型の3時間を足せばいい

86 ::2021/05/30(日) 08:19:33.75 ID:sI/PBpHp0.net
23+0+1+2
って事?

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

22+0+1+2
でした

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

> >>86

22+1+0+1
でした

89 ::2021/05/30(日) 13:19:27.33 ID:V6b9RRBw0.net
日付とか時間の処理はどの言語もまだまだ改善点はあると思うわ

90 ::2021/05/30(日) 16:02:17.59 ID:ff8VrToj0.net
リファレンス読んでわかった気になって、だろう、はずだ、であるべき、で作って一度も通さず本番リリースするのがアホってだけ。

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

91 ::2021/05/30(日) 17:43:21.32 ID:q4lu5w8S0.net
>>90
バカを他人に押し付けるなよ

92 ::2021/05/30(日) 20:29:55.37 ID:AbIqQMof0.net
>>90
計算できないじゃん

93 ::2021/05/31(月) 14:12:18.56 ID:zjv97jbY0.net
>>42
苛立ちがドアを叩く

総レス数 93
20 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★