1

時刻を UTC から電話の現地時間に変換しようとしています。このために、私は以下を使用しています:

if (progress.ActionDateTime.HasValue)
                    progress.ActionDateTime = TimeZoneInfo.ConvertTime(progress.ActionDateTime.Value, TimeZoneInfo.Local);

ただし、変換が行われた後も時間はまったく同じままです。この方法はWP7で機能していますか?

4

1 に答える 1

2

DateTime は、タイム ゾーンに関する情報を格納しません。documentationによるとTimeZoneInfo.ConvertTime、 DateTime.Kind プロパティを使用して、時刻の変換方法を決定します。

  • DateTimeKind.Local および DateTimeKind.Unspecified: 現地時間を destinationTimeZone の時間に変換します。
  • DateTimeKind.Utc: 協定世界時 (UTC) を destinationTimeZone の時刻に変換します。

2 番目のパラメーター (目的のタイム ゾーンを指定する) にを使用TimeZoneInfo.Localしているため、DateTimeKind が Local または Unspecified であると想定しています。したがって、ローカル日付をローカル日付に変換していますが、これは明らかに機能しません。

DateTime.ToLocalTimeDateTimeKind も使用します。ドキュメントによると:

  • Utc: DateTime のこのインスタンスは現地時間に変換されます。
  • ローカル: 変換は実行されません。
  • Unspecified: この DateTime のインスタンスは UTC 時間であると見なされ、Kind が Utc であるかのように変換が実行されます。

基本的に、TimeZoneInfo.ConvertTimeDateTimeKind.Unspecified = Local とDateTime.ToLocalTime見なしますが、DateTimeKind.Unspecified = Utc と見なします。前者が機能しないのに後者が機能する理由を説明します。

于 2012-12-28T08:43:46.010 に答える