パスワードを忘れた? アカウント作成
15536031 story
プログラミング

Windows Developer 公式 Twitter アカウントが新年に投稿した (そして削除した) コード 73

ストーリー by headless
新年 部門より

Microsoft のWindows Developer 公式 Twitterアカウント (@windowsdev) が新年にあたって以下のようなコードを投稿し、その後削除していたそうだ (The Register の記事)。

  1. if (DateTime.Now.ToString() == "01/01/2022 00:00:00")
  2. {
  3.      Console.WriteLine("Happy New Year");
  4. }
  5. else
  6. {
  7.      Console.WriteLine("It\'s still 2021...");
  8. }

非常にタイミングの厳しい2022年である。

  • by Anonymous Coward on 2022年01月09日 12時02分 (#4181963)

    DateTime.ToString();は実行環境のカルチャで出力変わるから日本じゃ機能しない…。
    ただDD/MM/YYとMM/DD/YYの両方対応してるし、mm/ss/HHみたいな順番でも機能するのは優しい。
    ともかくDateTimeの比較にToString();はしない方が良い。doubleですら危険。

    ここに返信
    • by Anonymous Coward

      日本だとこうだね>"2022/01/09 12:00:00"

      • by Anonymous Coward on 2022年01月09日 14時32分 (#4182008)

        うんにゃ、厳密には違うよ。
        引数なしのToStringは、[地域設定]で設定された形式(短い形式のほう)になる。
        日本では初期値がそうなっているけど、変更も可能。

        なので、「日本では"2022/01/09 12:00:00"」と思い込むと痛い目に合う。

        • by Anonymous Coward

          そうそう。24時間表記が気に入らなくてAM/PM表示するようにしてたりとか、ゼロフィル/ゼロサプレスしてたりね。

          • by Anonymous Coward

            日本だと和暦使うやつも多いでしょ。

            ええ、テスト環境は和暦にしてます。
            ものの見事に動作しないものばかりですよ。
            オフショアに派遣だけででなく自社のやつまでみんな文字列にしたがる。

        • by Anonymous Coward

          OSの設定を変えるもよしコードで現在のカルチャを変えるもよしですね

    • by Anonymous Coward

      目的を忘れて「ローカルタイムは地域に依存するから使うべきではない、UTCを使え」とかやりすぎないように注意

      • by Anonymous Coward

        ユーザーへの表示とユーザーからの入力はロケールにお任せで内部的にはUTCとかUNIXエポックタイム使うのが正解だと思いますが。
        サマータイムとかそのへんは別として。UTCじゃねぇGMTだって苦情も別として。

        • by Anonymous Coward

          過去の時刻はおおむねUTCでいいけど、未来の時刻を安易にUTCで統一しちゃダメだよ(要件にもよるが)。さもないと予定の日時までにタイムゾーンやサマータイムの規則が変わると時刻がずれるスケジューラーアプリとかができてしまう。

          • by Anonymous Coward

            それこそUTCにしないとダメだろ。
            タイムゾーン+時刻でもてってか?

    • by Anonymous Coward

      見事にそのバグを踏み抜いた日本のCOCOAへの皮肉だったりして。

      • by Anonymous Coward

        つまり、自称有志の方の中にMSの人がいたという事かもね

        • by Anonymous Coward

          自称有志が作ってたのはCOCOAじゃなくてCOVID-19Radar

  • by Anonymous Coward on 2022年01月09日 12時08分 (#4181964)

    ええ,Microsoft公式ツールの出力でも,そうなっていますよ。

    ここに返信
    • by Anonymous Coward

      は? 13月なんてないだろ?
      いまは12月40日だろ?

      # ひょっとしてクレヨン王国の民ですか?

      • by Anonymous Coward

        いいえ、12月31日の二百何十時とかですよ

      • by Anonymous Coward

        ええ、13月になると革命が起きますからね

    • by Anonymous Coward

      それなんてexchange

  • by Anonymous Coward on 2022年01月09日 12時13分 (#4181967)

    一瞬2022になってから2021にタイムリープするんですね

    ここに返信
  • by Anonymous Coward on 2022年01月09日 12時16分 (#4181968)

    前もって準備なしに
    実行して事故るのはいつものパターン。
    準備するというのマイクロソフトの単語の中に入れてくださいな。

    ここに返信
  • by Anonymous Coward on 2022年01月09日 12時19分 (#4181969)

    DateTime.Today.Year だけ使えばいいじゃないですか……

    ここに返信
    • by Anonymous Coward

      12月31日「Happy New Year」

      • by Anonymous Coward

        「Happy New Year」ってフレーズは年末だと日本の「よいお年を」って意味に使うんですけどね。

    • by Anonymous Coward

      年だけ取り出すのに小一時間かかるとはずいぶんゆっくりしたソフトでつね

  • by Anonymous Coward on 2022年01月09日 12時21分 (#4181971)

    if (DateTime.Now.ToString("MMdd") == "0101")
    {
    Console.WriteLine("Happy New Year");
    }
    else
    {
    Console.WriteLine($"It\'s still {DateTime.Now.Year}...");
    }

    #異論は認める

    ここに返信
    • by 90 (35300) on 2022年01月09日 13時11分 (#4181993) 日記

      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}.");
      }

      • by Anonymous Coward on 2022年01月09日 15時02分 (#4182016)

        コンパイルが通りません。バグですか?

        • by Anonymous Coward

          コンパイルする系統の言語に見えません

          • by Anonymous Coward

            コンパイルする系統の言語ですよ。

      • by Anonymous Coward

        毎日がハッピーニューイヤー!

        • by 90 (35300) on 2022年01月09日 14時24分 (#4182006) 日記

          やだなぁ、年末年始以外に動かす人がいるわけないじゃないですか。自明でしょう。絶対大丈夫ですよ! 心配性だなぁ。新年シーズン以外に……そんな……

          • by Anonymous Coward on 2022年01月09日 22時21分 (#4182134)

            そうですよねえ
            2023年に思い出したようにやってみる人なんて絶対いませんよね。
            そしてコードが書かれた時期よりさかのぼって2020年に実行したりなんて、もっとあるはずないですよね。

      • by Anonymous Coward

        Exceptionでキャッツしちゃうと新年以外の要因でもそこに分岐しちゃう可能性が……

        • by Anonymous Coward

          発生しうる例外が明示されたメソッドしか呼んでなくて、
          無関係な例外が発生しない事を確認済みなら許容範囲では。

          • by Anonymous Coward

            どうやって確認するのよ。自分のとこだけで走ってるわけじゃないんだよ?

            • by Anonymous Coward

              例えばDateTime.ToStringならFormatExceptionとArgumentOutOfRangeExceptionが発生というようなことがMSDNに書かれてる。そういうのを確認すればいい。それ以外のが発生しうるなんて特殊な状況を考えるのは無駄だよ。
              https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tostring?v... [microsoft.com]

              #こういう例外の使い方を肯定してるわけではない

      • by Anonymous Coward

        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

    • by Anonymous Coward

      最近だと
      if (DateTime.Now is { Month: 1, Day: 1 }) { Console.WriteLine("Happy New Year"); }
      みたいな書き方が出来る。
      それから処理中に年が変わる可能性を考慮してDateTime.Nowを二回使う場合は一度変数を入れた方が良いかな。

      • by Anonymous Coward

        どっちにしても1月2日になって実行する可能性が排除されてるのは変わってないなあ

        • by Anonymous Coward

          1月2日は「It\'s still 2022...」ってなるよ。新年なのにこのセリフよ

          • by Anonymous Coward

            笑点の小遊三師匠だったと思うけど、2月になると
            「今年も残りあと11ヶ月になりました、みなさん年越しの支度はお済みでしょうか」
            って挨拶してたな。
            それがありなら1月2日に「まだ2022年だよ……」もありじゃね

            • by Anonymous Coward

              正月明けにいきなり今年も残すところあと365日とか言い出さないあたりなんとも言えない味を感じる…
              んで今年はあと366日ですよとか突っ込ませる。

    • by Anonymous Coward

      DateTimeをToStringして比較するのはどうにかならんかったのか
      面倒なのはわかる
      .Net6ならDateOnlyがいるから幸せにになれるはず

  • by Anonymous Coward on 2022年01月09日 15時45分 (#4182023)

    ツイタにコード投稿すると、見た人の画面で実行されるてこと?
    それにこのコード意味あるの?
    実行して2022かまだ2021かの分岐みたいだけど
    時計見れば2022を迎えたかどうか分かるやん

    どういうこと?

    ここに返信
    • by Anonymous Coward

      2022年になった1秒間だけしか"Happy New Year"と表示されない。
      しかも日本を含む一部の国ではそれも表示されない。
      それ以降は「まだ2021年」と表示される。
      2021年の間は期待通りに動作する。

      • by Anonymous Coward

        それでいて年が明けてから1秒以内なら何度開いてもあけおめしてくれる。
        なんとも味のあるコードである。

    • by Anonymous Coward

      「あけましておめでとう」「謹賀新年」「a happy new year」など、いろんな表現があると思いますけど、
      可読性の高いコードで表すのも表現手法の一つです。

  • by Anonymous Coward on 2022年01月09日 21時33分 (#4182122)

    MSの開発の人のプログラムレベルはそれほど高くなく
    どちらかというと中学生並みの凡ミスを犯すレベルってこと?

    ここに返信
typodupeerror

※ただしPHPを除く -- あるAdmin

読み込み中...