アカウント名:
パスワード:
日本国内だけで利用されるから、タイムゾーン決め打ちで自前の時刻処理を使ってるんだね
今回のはいわゆるタイムゾーンのせいではない。逆に自前処理だったら問題は小さかった。変数の値をファイル保存/読み込み処理を、何も考えずに開発言語の標準ライブラリにお任せしたからこんな問題が起きた。変数の値を自前でファイル保存してればいわゆるタイムゾーンの問題(時差で多少狂う程度の小さな問題)だけで済んだ。
#極論を言えばxamarinのせい!w
それがホントならxamarin何やってんのって感じだな
#3994406 はウソですね。.NETの標準ライブラリ関数の使い方が問題です。
DateTime.ToString メソッド (System) | Microsoft Docs https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tostring [microsoft.com]
DateTime.Parse メソッド (System) | Microsoft Docs https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.parse [microsoft.com]
いずれも引数にロケールを指定して日付⇔文字列の変換が可能です。その指定を省略すると
ToString("yyyyMMdd")のようにしていればロケールのことを忘れてても普通に動いた。これが自前処理ToString()のように「何も考えずに」お任せすると今回のような問題が起きる。
引数なしのtostringは人間が読める自然な形式に変換するものです。もっと言うと表示用の文字列に変換するものです。つまり何も考えず誤用した結果です。
時間が関わるプログラムは素人だけど(というか素人だからこその疑問だけど)、日時を何も考えずに取り出してきたらただ一つの数値が出てくるようなものじゃないんだね?NTFSみたいに1601年1月1日0時0分0秒から何100ナノ秒経過したかを示す整数値とか、Excelみたいに1900年1月1日(or 1904年)から何日経過したかを示す実数値とか、そういうのがデフォルトだと思ってたわ。
# 科学的なプログラムならかじったことあるけど、月曜日に計算した場合と金曜日に計算した場合とで結果が変わるようにプログラムする機会なんて無いからね。
内部的にはそういう数値だよ。C#は日付の数値を日付文字列に変換したり、逆に日付文字列を日付の数値として読み込んでくれる機能がある。その機能を使って起きた問題。
曜日は問題じゃないの経過時間の計算とかで困るの。エクセルも表面上はOSのタイムゾーン見てるから気をつけないとハマる。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー
決め打ち (スコア:0)
日本国内だけで利用されるから、タイムゾーン決め打ちで自前の時刻処理を使ってるんだね
Re: (スコア:0)
今回のはいわゆるタイムゾーンのせいではない。逆に自前処理だったら問題は小さかった。
変数の値をファイル保存/読み込み処理を、何も考えずに開発言語の標準ライブラリにお任せしたからこんな問題が起きた。
変数の値を自前でファイル保存してればいわゆるタイムゾーンの問題(時差で多少狂う程度の小さな問題)だけで済んだ。
#極論を言えばxamarinのせい!w
Re: (スコア:0)
それがホントならxamarin何やってんのって感じだな
Re: (スコア:1)
#3994406 はウソですね。.NETの標準ライブラリ関数の使い方が問題です。
DateTime.ToString メソッド (System) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.tostring [microsoft.com]
DateTime.Parse メソッド (System) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.parse [microsoft.com]
いずれも引数にロケールを指定して日付⇔文字列の変換が可能です。
その指定を省略すると
Re: (スコア:0)
ToString("yyyyMMdd")のようにしていればロケールのことを忘れてても普通に動いた。これが自前処理
ToString()のように「何も考えずに」お任せすると今回のような問題が起きる。
Re: (スコア:0)
引数なしのtostringは人間が読める自然な形式に変換するものです。
もっと言うと表示用の文字列に変換するものです。
つまり何も考えず誤用した結果です。
Re:決め打ち (スコア:0)
時間が関わるプログラムは素人だけど(というか素人だからこその疑問だけど)、日時を何も考えずに取り出してきたらただ一つの数値が出てくるようなものじゃないんだね?
NTFSみたいに1601年1月1日0時0分0秒から何100ナノ秒経過したかを示す整数値とか、Excelみたいに1900年1月1日(or 1904年)から何日経過したかを示す実数値とか、そういうのがデフォルトだと思ってたわ。
# 科学的なプログラムならかじったことあるけど、月曜日に計算した場合と金曜日に計算した場合とで結果が変わるようにプログラムする機会なんて無いからね。
Re: (スコア:0)
内部的にはそういう数値だよ。
C#は日付の数値を日付文字列に変換したり、逆に日付文字列を日付の数値として読み込んでくれる機能がある。その機能を使って起きた問題。
Re: (スコア:0)
曜日は問題じゃないの経過時間の計算とかで困るの。エクセルも表面上はOSのタイムゾーン見てるから気をつけないとハマる。