1

構成ファイルに文字列があり、タイムゾーンで日時を定義していました。構成ファイルから値を読み取っているときに、この値を取得できません。

構成ファイル内:

Setting name="abcdefgh" value="2012-08-10T22:00:00-08:00"

C# では、これを次のように読んでいます。

 DateTime StartDate;

 StartDate = DateTime.ParseExact(RoleEnvironment.GetConfigurationSettingValue("abcdefgh"), "yyyy-MM-dd HH:mm:ss", null);
            Configuration.Instance.abcdefgh= StartDate;

開始日は、2012 年 8 月 11 日 11:30:00 で、タイムゾーンはありません。

そのまま読みたい。また、構成ファイルに日時を書き込む私の形式が正しいかどうかも教えてください

4

4 に答える 4

0

これは標準形式であるため、ParseExact は必要ありません。次を試してください。

StartDate = DateTime.Parse(RoleEnvironment.GetConfigurationSettingValue("abcdefgh"));

あなたが提供したハードコードされた値を置き換えて、タイムゾーン(GMT-4)の正しい結果を得ました

2012 年 8 月 11 日 午前 2:00

注:他の人が述べたように、タイムゾーンは保持されないため、文字列に含まれるタイムゾーン情報に対応する正しいローカライズされた時刻を取得できますが、それがどのタイムゾーンであったかを知ることはできません. プロパティはDateTime.Kind、現地時間であることを反映します。

于 2012-08-21T05:35:23.420 に答える
0

DateTime はタイムゾーンに関する情報を保持しません。文字列を解析してタイムゾーンに関する情報を保持するには、DateTimeOffset構造を使用する必要があります。

于 2012-08-21T05:18:06.020 に答える
0

DateTimeOffsetへの MSDN リンク。

正確な時点を参照する場合は常に DateTimeOffset を使用してください。たとえば、「現在」、トランザクション時間、ファイル変更時間、ログ イベント時間などを計算するために使用します。タイム ゾーンが不明な場合は、UTC と共に使用します。これらの使用は、DateTime が優先されるシナリオよりもはるかに一般的であるため、これをデフォルトと見なす必要があります。

var date = DateTimeOffset.Parse("2012-08-10T22:00:00-08:00");
date.Offset // -08:00:00,  offset from Coordinated Universal Time (UTC)
date.DateTime // 10/08/2012 22:00:00, 
于 2012-08-21T05:18:36.937 に答える
0

タイムゾーン情報を保存する場合は、 DateTimeOffset構造体 (および)を使用します。DateTimeOffset.ParseExact

ParseExact 形式も設定値と完全には一致しません。タイムゾーン情報の最後に zz が必要です。DateTimeOffset.Parse設定文字列は標準形式であるため、使用することもできます。

于 2012-08-21T05:19:53.037 に答える