Windows Developer 公式 Twitter アカウントが新年に投稿した (そして削除した) コード 73
ストーリー by headless
新年 部門より
新年 部門より
Microsoft のWindows Developer 公式 Twitterアカウント (@windowsdev) が新年にあたって以下のようなコードを投稿し、その後削除していたそうだ (The Register の記事)。
- if (DateTime.Now.ToString() == "01/01/2022 00:00:00")
- {
- Console.WriteLine("Happy New Year");
- }
- else
- {
- Console.WriteLine("It\'s still 2021...");
- }
非常にタイミングの厳しい2022年である。
おま国 (スコア:0)
DateTime.ToString();は実行環境のカルチャで出力変わるから日本じゃ機能しない…。
ただDD/MM/YYとMM/DD/YYの両方対応してるし、mm/ss/HHみたいな順番でも機能するのは優しい。
ともかくDateTimeの比較にToString();はしない方が良い。doubleですら危険。
Re: (スコア:0)
日本だとこうだね>"2022/01/09 12:00:00"
Re:おま国 (スコア:1)
うんにゃ、厳密には違うよ。
引数なしのToStringは、[地域設定]で設定された形式(短い形式のほう)になる。
日本では初期値がそうなっているけど、変更も可能。
なので、「日本では"2022/01/09 12:00:00"」と思い込むと痛い目に合う。
Re: (スコア:0)
そうそう。24時間表記が気に入らなくてAM/PM表示するようにしてたりとか、ゼロフィル/ゼロサプレスしてたりね。
Re: (スコア:0)
日本だと和暦使うやつも多いでしょ。
ええ、テスト環境は和暦にしてます。
ものの見事に動作しないものばかりですよ。
オフショアに派遣だけででなく自社のやつまでみんな文字列にしたがる。
Re: (スコア:0)
OSの設定を変えるもよしコードで現在のカルチャを変えるもよしですね
Re: (スコア:0)
目的を忘れて「ローカルタイムは地域に依存するから使うべきではない、UTCを使え」とかやりすぎないように注意
Re: (スコア:0)
ユーザーへの表示とユーザーからの入力はロケールにお任せで内部的にはUTCとかUNIXエポックタイム使うのが正解だと思いますが。
サマータイムとかそのへんは別として。UTCじゃねぇGMTだって苦情も別として。
Re: (スコア:0)
過去の時刻はおおむねUTCでいいけど、未来の時刻を安易にUTCで統一しちゃダメだよ(要件にもよるが)。さもないと予定の日時までにタイムゾーンやサマータイムの規則が変わると時刻がずれるスケジューラーアプリとかができてしまう。
Re: (スコア:0)
それこそUTCにしないとダメだろ。
タイムゾーン+時刻でもてってか?
Re: (スコア:0)
見事にそのバグを踏み抜いた日本のCOCOAへの皮肉だったりして。
Re: (スコア:0)
つまり、自称有志の方の中にMSの人がいたという事かもね
Re: (スコア:0)
自称有志が作ってたのはCOCOAじゃなくてCOVID-19Radar
ええ,まだ2021年13月ですよね。 (スコア:0)
ええ,Microsoft公式ツールの出力でも,そうなっていますよ。
Re: (スコア:0)
は? 13月なんてないだろ?
いまは12月40日だろ?
# ひょっとしてクレヨン王国の民ですか?
Re: (スコア:0)
いいえ、12月31日の二百何十時とかですよ
Re: (スコア:0)
ええ、13月になると革命が起きますからね
Re: (スコア:0)
それなんてexchange
初笑いかな? (スコア:0)
一瞬2022になってから2021にタイムリープするんですね
雑なところがマイクロソフト (スコア:0)
前もって準備なしに
実行して事故るのはいつものパターン。
準備するというのマイクロソフトの単語の中に入れてくださいな。
年だけ取り出せよと小一時間 (スコア:0)
DateTime.Today.Year だけ使えばいいじゃないですか……
Re: (スコア:0)
12月31日「Happy New Year」
Re: (スコア:0)
「Happy New Year」ってフレーズは年末だと日本の「よいお年を」って意味に使うんですけどね。
Re: (スコア:0)
年だけ取り出すのに小一時間かかるとはずいぶんゆっくりしたソフトでつね
正しい例 (スコア:0)
if (DateTime.Now.ToString("MMdd") == "0101")
{
Console.WriteLine("Happy New Year");
}
else
{
Console.WriteLine($"It\'s still {DateTime.Now.Year}...");
}
#異論は認める
Re:正しい例 (スコア:1)
try
{
(DateTime.Now.ToString("YYYYMMdd001").ToInt32
}
catch(Exception e)
{
Console.WriteLine("Happy New Year to Everyone and especially Microsoft as well as Honda devs");
}
finally
{
Console.WriteLine($"It\ presently is year {DateTime.Now.Year}.");
}
Re:正しい例 (スコア:1)
コンパイルが通りません。バグですか?
Re: (スコア:0)
コンパイルする系統の言語に見えません
Re: (スコア:0)
コンパイルする系統の言語ですよ。
Re: (スコア:0)
毎日がハッピーニューイヤー!
Re:正しい例 (スコア:2)
やだなぁ、年末年始以外に動かす人がいるわけないじゃないですか。自明でしょう。絶対大丈夫ですよ! 心配性だなぁ。新年シーズン以外に……そんな……
Re:正しい例 (スコア:1)
そうですよねえ
2023年に思い出したようにやってみる人なんて絶対いませんよね。
そしてコードが書かれた時期よりさかのぼって2020年に実行したりなんて、もっとあるはずないですよね。
Re: (スコア:0)
Exceptionでキャッツしちゃうと新年以外の要因でもそこに分岐しちゃう可能性が……
Re: (スコア:0)
発生しうる例外が明示されたメソッドしか呼んでなくて、
無関係な例外が発生しない事を確認済みなら許容範囲では。
Re: (スコア:0)
どうやって確認するのよ。自分のとこだけで走ってるわけじゃないんだよ?
Re: (スコア:0)
例えばDateTime.ToStringならFormatExceptionとArgumentOutOfRangeExceptionが発生というようなことがMSDNに書かれてる。そういうのを確認すればいい。それ以外のが発生しうるなんて特殊な状況を考えるのは無駄だよ。
https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tostring?v... [microsoft.com]
#こういう例外の使い方を肯定してるわけではない
Re: (スコア:0)
function greeting() {
static past_year=""
if past_year!=""
if past_year!=get_year()
print get_year(), "is coming"
else
print get_year(), "now"
end
end
past_year=get_year()
end
Re: (スコア:0)
最近だと
if (DateTime.Now is { Month: 1, Day: 1 }) { Console.WriteLine("Happy New Year"); }
みたいな書き方が出来る。
それから処理中に年が変わる可能性を考慮してDateTime.Nowを二回使う場合は一度変数を入れた方が良いかな。
Re: (スコア:0)
どっちにしても1月2日になって実行する可能性が排除されてるのは変わってないなあ
Re: (スコア:0)
1月2日は「It\'s still 2022...」ってなるよ。新年なのにこのセリフよ
Re: (スコア:0)
笑点の小遊三師匠だったと思うけど、2月になると
「今年も残りあと11ヶ月になりました、みなさん年越しの支度はお済みでしょうか」
って挨拶してたな。
それがありなら1月2日に「まだ2022年だよ……」もありじゃね
Re: (スコア:0)
正月明けにいきなり今年も残すところあと365日とか言い出さないあたりなんとも言えない味を感じる…
んで今年はあと366日ですよとか突っ込ませる。
Re: (スコア:0)
DateTimeをToStringして比較するのはどうにかならんかったのか
面倒なのはわかる
.Net6ならDateOnlyがいるから幸せにになれるはず
どういうこと? (スコア:0)
ツイタにコード投稿すると、見た人の画面で実行されるてこと?
それにこのコード意味あるの?
実行して2022かまだ2021かの分岐みたいだけど
時計見れば2022を迎えたかどうか分かるやん
どういうこと?
Re: (スコア:0)
2022年になった1秒間だけしか"Happy New Year"と表示されない。
しかも日本を含む一部の国ではそれも表示されない。
それ以降は「まだ2021年」と表示される。
2021年の間は期待通りに動作する。
Re: (スコア:0)
それでいて年が明けてから1秒以内なら何度開いてもあけおめしてくれる。
なんとも味のあるコードである。
Re:どういうこと? (スコア:1)
どうやら英語圏(アメリカ?)では「Happy New Year」は年が明けた「瞬間」だけ
あなたの解釈だと、その「瞬間」は正確に1秒間ということになりそうだけど、どの辺りから来た情報?
少なくとも1月1日いっぱいくらいは使っても問題無さそうな気がするけど。
Re: (スコア:0)
「あけましておめでとう」「謹賀新年」「a happy new year」など、いろんな表現があると思いますけど、
可読性の高いコードで表すのも表現手法の一つです。
Re:どういうこと? (スコア:1)
単体表示するなら「a happy new year」は駄目だぞ「happy new year」だ
ということをこの前知った
つまり結論としては (スコア:0)
MSの開発の人のプログラムレベルはそれほど高くなく
どちらかというと中学生並みの凡ミスを犯すレベルってこと?