2

東部標準時であることがわかっている文字列があります。

"8/14/2013 5:51am"

夏時間を考慮して、これをポータブル クラス ライブラリの UTC DateTime に変換したいと考えています。Portable Class Library に次のメソッドがないことがわかりました。

TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")

ポータブル クラス ライブラリでこれを行うことは可能ですか? そうでない場合、文字列にタイムゾーン情報がない場合、通常のクラスライブラリでどのように行うのですか?

4

2 に答える 2

4

TimeZoneInfo完全に移植可能ではありません。存在しますが、バックアップするデータがないため、UTC とローカルタイム ゾーンへのアクセスしか提供できません。ID でゾーンを解決することはできません。

幸いなことに、Noda Timeにはポータブル バージョンがありますが、Windows ゾーン名ではなく、IANA ゾーン名を使用する必要があります。詳細については、タイムゾーン タグ wikiを参照してください。また、PCL としての NodaTime の制限について必ずお読みください。

using NodaTime;
using NodaTime.Text;

LocalDateTimePattern pattern = LocalDateTimePattern
                                 .CreateWithInvariantCulture("M/dd/yyyy h:mmtt");
LocalDateTime ldt = pattern.Parse("8/14/2013 5:51am").Value;

DateTimeZone tz = DateTimeZoneProviders.Tzdb["America/New_York"];
ZonedDateTime zdt = tz.AtLeniently(ldt);
Instant instant = zdt.ToInstant();

Debug.WriteLine(instant.ToString());  // 2013-08-14T09:51:00Z   (UTC)

// if you need it as a DateTime
DateTime utc = instant.ToDateTimeUtc();
于 2013-08-14T12:48:58.197 に答える