X



プログラミングで「午後10時に3時間を足すと1日と2時間」になる問題がついに解決へ!
■ このスレッドは過去ログ倉庫に格納されています
0001張り手(京都府) [US]垢版2021/05/29(土) 15:03:29.94ID:MiSuZAgo0?2BP(2072)

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時間」になる。

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

以下ソース
0002チキンウィングフェースロック(愛知県) [AT]垢版2021/05/29(土) 15:03:54.02ID:VK3aA4LP0
はい
0004ハーフネルソンスープレックス(コロン諸島) [US]垢版2021/05/29(土) 15:06:21.47ID:zbwKIdXyO
細かいことは気にするな
時間など概念にすぎん
0005ストレッチプラム(静岡県) [US]垢版2021/05/29(土) 15:07:46.56ID:ZfV4aHEB0
どんなとき使うんだこれ
0006トラースキック(東京都) [JP]垢版2021/05/29(土) 15:09:29.66ID:2PTpVD0r0
10+3が26になるの?
0007膝十字固め(SB-Android) [SE]垢版2021/05/29(土) 15:11:28.57ID:huKgNs9L0
0時と24時が区別できないってこと?
0008スリーパーホールド(栃木県) [US]垢版2021/05/29(土) 15:11:42.20ID:PCmU27uC0
これ完全な設計ミスに見えるしタイムゾーン気にしなきゃいけない外人の方が嵌りそうなのにこんなクソ仕様を押し通してたのか
0011中年'sリフト(茸) [KR]垢版2021/05/29(土) 15:14:04.97ID:F8LCtEi60
早稲田予備校の13時の時計みたいな?
0012ストレッチプラム(静岡県) [US]垢版2021/05/29(土) 15:16:07.34ID:ZfV4aHEB0
>>8
時差問題はDateTimeOffsetでいいんじゃないかな
他の設計ミスってなに?
0014ラ ケブラーダ(庭) [ニダ]垢版2021/05/29(土) 15:18:06.22ID:1Lm+pUlF0
>>13
close 忘れるなよ
0015キングコングラリアット(東京都) [DO]垢版2021/05/29(土) 15:18:14.96ID:56DvKmMO0
DOSの場合、日付と時刻が別のファンクションコールになってるやつか?
0017頭突き(愛知県) [TW]垢版2021/05/29(土) 15:18:58.10ID:fnVF8l1E0
>たとえば、午後10時に3時間を追加すると、予想される午前1時ではなく「1日と2時間」になる。
なんで1日と1時間にならないんだ…?
0018ラ ケブラーダ(新潟県) [CN]垢版2021/05/29(土) 15:20:22.77ID:V6ycCcUf0
>たとえば、午後10時に3時間を追加すると、予想される午前1時ではなく「1日と2時間」になる。

.NETなんて汚らしいもの触ったことないから知らないけど、どういうこと?
0020スリーパーホールド(栃木県) [US]垢版2021/05/29(土) 15:39:53.75ID:PCmU27uC0
>>12
時刻を必要としない場合やその逆の型がない事そのものが設計ミスだろ
0022フライングニールキック(東京都) [US]垢版2021/05/29(土) 15:43:12.60ID:PDpN9+y80
>>4
今は虚数の時間も扱う時代だから細かいことは気にしない方がいいよね
0023ストレッチプラム(静岡県) [US]垢版2021/05/29(土) 15:43:14.27ID:ZfV4aHEB0
>>20
時刻不要は分かるけど日付は分からんな
俺が「時刻だけ保存する永続化」とか知らないからかね
0025マシンガンチョップ(茸) [FR]垢版2021/05/29(土) 16:00:26.21ID:+v5uk7z50
こんなの一回動かしゃわかる話。
アホ設計者やアホ机上コードレビュワーは文章だけでプログラマーが迷わないよう完璧にしようとムダに時間かける。
そんな設計もレビューも無駄。要求設計と受け入れ試験だけ書いてろ。
0027ドラゴンスープレックス(愛知県) [US]垢版2021/05/29(土) 16:04:51.90ID:Mj9KOk8A0
つーかコンマ以下の値を計算するなら表示しろよ
0030ジャストフェイスロック(佐賀県) [FR]垢版2021/05/29(土) 16:07:14.51ID:3puMvkvG0
>>23
RDBに時刻だけ保存するとか1に書いてある

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

日付や時間の型、タイムゾーン、時間の加算操作
辺りがどう関係しているのか判らない
0031中年'sリフト(東京都) [CN]垢版2021/05/29(土) 16:07:30.47ID:u07dOGjh0
実際に書いてみたら「1.01:00:00」とかいう計算結果になった
訳がわかんねえ
0032逆落とし(新潟県) [JP]垢版2021/05/29(土) 16:08:40.84ID:prOtxGmT0
エクセルは時間の計算苦手だよね
0033張り手(兵庫県) [US]垢版2021/05/29(土) 16:11:53.53ID:sRID6rab0
N88-BASICだとどうなるの?
0036アイアンフィンガーフロムヘル(埼玉県) [EU]垢版2021/05/29(土) 16:25:59.35ID:I24xNML80
そういや2000年問題んときIT系の会社にいて、とりあえず問題は無いと確認済みだけど数人は24時回るまで会社待機したな
0037カーフブランディング(茸) [US]垢版2021/05/29(土) 16:27:24.18ID:QuFAZxJJ0
>>5
デリヘルの時間が狂うと料金も変わる
0043中年'sリフト(東京都) [CN]垢版2021/05/29(土) 16:33:54.12ID:u07dOGjh0
でも、1日と2時間なんてことにはならなかったよ
書いた人が1日と1時間って書こうとしたのを間違ったんじゃないの
0045TEKKAMAKI(東京都) [US]垢版2021/05/29(土) 16:51:37.38ID:blIbDajg0
今ザマリン生きてる?
0046ヒップアタック(東京都) [ニダ]垢版2021/05/29(土) 17:27:18.46ID:ZNsNSAJp0
人間が常にunixtimeで考えろよ!
0048ヒップアタック(東京都) [ニダ]垢版2021/05/29(土) 17:43:16.13ID:ZNsNSAJp0
欧米どもの日時表記感覚はつくづくコンピューターの時代に向いてないよな

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

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

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

一方、シナさんは曜日すら数字で表すから合理的
月曜→星期一 火曜→星期ニ 水曜→星期三‥
0049イス攻撃(群馬県) [IR]垢版2021/05/29(土) 17:47:58.68ID:qxh1tzgX0
タイムリープものか
0050ラ ケブラーダ(新潟県) [CN]垢版2021/05/29(土) 17:49:35.10ID:V6ycCcUf0
>>29
実際.NETなんか知らんから素人の馬鹿で結構だけど、
お前さんが.NETに詳しいなら1日と2時間なんてアホな値になる理由を教えてくれ
0051ヒップアタック(東京都) [ニダ]垢版2021/05/29(土) 17:54:52.29ID:ZNsNSAJp0
メリケンの感覚だと
midnightは12:00 AM
midnightの1分後は0:01 AMではなく12:01 AM
midnightの59分後は12:59 AM
んでmidnightの1時間後は? 1:00 AM

1より小さい0時台の時刻が彼らには存在しない
やつらバカじゃね?
0052アイアンクロー(北海道) [ニダ]垢版2021/05/29(土) 17:55:20.78ID:A7y71s1/0
深夜0時が12時24時0時の3つで認識されてるからだろ
0053ストレッチプラム(静岡県) [US]垢版2021/05/29(土) 17:55:49.33ID:ZfV4aHEB0
>>50
日常的に.NET使ってる俺でもこの記事が何を言ってるか分からんw
そもそも「時刻だけ」の概念が無いって書いてあるのに
「午後10時」っていうオブジェクトがある前提になっちゃってるよね
0054キチンシンク(東京都) [US]垢版2021/05/29(土) 18:00:31.73ID:50IJYAHv0
「shachiku」っていう関数を作って、何時間たってもその日扱いにするようにしたらいい
そしたら、28日は30時に退勤、29は7時に出勤って処理も簡単になる
0055ヒップアタック(東京都) [ニダ]垢版2021/05/29(土) 18:07:06.00ID:ZNsNSAJp0
1日と2時間3分4秒(1.02:03:04)を表すTimeSpanオブジェクトを作成
Dim ts1 As TimeSpan = TimeSpan.Parse("1.2:3:4")

1.2とかバカ過ぎw
0056ヒップアタック(東京都) [ニダ]垢版2021/05/29(土) 18:11:24.94ID:ZNsNSAJp0
>>54
それを容れる代わりにNoukiという日付関数も欲しいわ
今月中納品の場合は5月31日過ぎても6月にならず
5月32日、33日とカウントアップしてゆく‥
0057クロスヒールホールド(茸) [US]垢版2021/05/29(土) 18:23:19.37ID:yFOzCW7f0
// js
var omaTS = new Date().getFullYear();
if(omaTS==1622219194545) var otiTS = omaTS-otiTS;
0058チキンウィングフェースロック(茸) [EU]垢版2021/05/29(土) 18:27:46.44ID:hOhgRaNc0
>>55
var okazanuriki = new Date("2021-05-29 18:28:28");
0059イス攻撃(大阪府) [US]垢版2021/05/29(土) 18:30:06.88ID:FAEtZgP+0
何が何だか分からないw
普通に?間抜けな設計になってても、午後10時に 3時間を足して 1日と 1時間じゃねぇの?
なんで 2時間なんだ。

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

つうかみんなどうしてんの。unixtimeなライブラリ的なものを作る(でラッパーでくるむとか)
とかしたほうが楽な気がするな。
0060ダイビングヘッドバット(千葉県) [US]垢版2021/05/29(土) 18:35:29.50ID:Ty8KFFsx0
.NETしばらく触ってないけどこんな仕様だったのか
0061ストレッチプラム(静岡県) [US]垢版2021/05/29(土) 18:45:01.53ID:ZfV4aHEB0
わからんなあ
普通に次の日の01:00になるけどなあ

https://dotnetfiddle.net/O0m99O
0062膝靭帯固め(北海道) [JO]垢版2021/05/29(土) 18:49:08.47ID:pGBd672y0
なかticksでねーの
0064エルボーバット(神奈川県) [US]垢版2021/05/29(土) 18:57:50.30ID:4xr0CxMY0
>>59
datetimeクラスがおかしいという話じゃなくて、時間を加減するときのTimeSpanがおかしいという話。
つか、VBをバカにする自称エリートプログラマ揃いのネラーさんは
>>1の記事の内容も読めないやつばかりでうんざりするな。
0065エルボーバット(神奈川県) [US]垢版2021/05/29(土) 19:03:41.33ID:4xr0CxMY0
datetime構造は、日付のみと、日付時間がごっちゃになってるから
2つの併用ができない。だからdateonly構造とtimeonly構造の2つが追加された。

ということを言ってるだけなのにそれすら読み解けない低学歴揃いがネラー
これでVBをバカにする自称エリート気取ってんだから本当に病が深い
0066雪崩式ブレーンバスター(茸) [US]垢版2021/05/29(土) 19:21:47.87ID:0mJuqt/M0
>>65
専門的なことを門外漢に分かりやすく説明できない奴は賢ぶってるだけのバカ
0068トラースキック(岩手県) [US]垢版2021/05/29(土) 19:36:52.63ID:Ge1EOlII0
時間の話でしょ?
旧 10+3=1日と2時間
新 10+3=1
0069張り手(兵庫県) [US]垢版2021/05/29(土) 19:37:09.21ID:sRID6rab0
サマータイムはサラボーンに勝てるわけが無いだろ
0073エルボーバット(神奈川県) [US]垢版2021/05/29(土) 21:18:22.46ID:4xr0CxMY0
>>70
元の記事の「一日と二時間」は多分タイプミスで
「一日と一時間」が正しいと思う。んで、エクセル上で「午前一時」と入力してほしいときに
「一日と一時間」って入ってしまうとデータ処理に問題が出てくるよね。
0074スターダストプレス(鳥取県) [ニダ]垢版2021/05/29(土) 21:20:34.31ID:LU8tsUbX0
>>48
そして
01/05/21が
DD/MM/YYなのか
MM/DD/YYなのか
分からずハマるパターン
0075イス攻撃(大阪府) [US]垢版2021/05/29(土) 21:23:06.96ID:FAEtZgP+0
>>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またぎが前提の内容とか?
0076ダイビングエルボードロップ(千葉県) [US]垢版2021/05/29(土) 22:06:22.01ID:Y6U49TPT0
>>32
整数部は日にち
小数点以下は時間を表す。

1時間は1/24だ。

って知ってるか。
0080トペ コンヒーロ(大阪府) [ニダ]垢版2021/05/29(土) 22:56:34.32ID:XBbC4/bt0
time_t を使えば、秒単位で足りる用途なら、全部解決。

ただ、ちょっと使い方が難しいので、プロ未満のITドカタには無理。
0082スパイダージャーマン(静岡県) [US]垢版2021/05/30(日) 00:02:00.43ID:AbIqQMof0
この記事書いた奴が.NET嫌いだっていうだけで
日付と時刻を分離したクラスを実装したっていうだけの話だなこれ
0084張り手(山口県) [FR]垢版2021/05/30(日) 00:22:29.99ID:Yxc898ba0
GPSの日が7168日戻るせいで古い端末が使えなくなったのは知られてないな
現在位置を知るだけなら問題ないもんな
0085パイルドライバー(北海道) [US]垢版2021/05/30(日) 08:08:54.52ID:q4lu5w8S0
timespanは時間間隔を入れるもので、時刻を入れるのはdatetimeだろ
そのへん理解出来てない
datetime型の午後10時にtimespan型の3時間を足せばいい
0090ジャンピングカラテキック(茸) [ZA]垢版2021/05/30(日) 16:02:17.59ID:ff8VrToj0
リファレンス読んでわかった気になって、だろう、はずだ、であるべき、で作って一度も通さず本番リリースするのがアホってだけ。

そもそも時間なんて不安定なものは数値で扱うのがどうかしてる。
文字列で渡せばいいんだよ。バカなやり方で結構、間違いさえしなけりゃな。
0092スパイダージャーマン(静岡県) [US]垢版2021/05/30(日) 20:29:55.37ID:AbIqQMof0
>>90
計算できないじゃん
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況