GMT タイムゾーンの Xamarin Studio (v4.0.12 - Mono 3.2.3) で次のコードを実行しています...
var utcDateTime = new DateTime(1970, 07, 15, 15, 00, 00, DateTimeKind.Utc);
string utcTimeString = utcDateTime.ToLongTimeString();
string localTimeString = utcDateTime.ToLocalTime().ToLongTimeString();
...しかし、両方の変数が値「3:00:00 PM」を返します。
.NET 4.0 で同じコードを実行すると、2 番目の変数は "4:00:00 PM" になります。これは私が期待するものです。
何が欠けているのかわかりませんが、これは両方で同一ではありませんか?
「ToLocalTime()」から返される DateTime は、「Kind」が「Local」になっていることを除いて、オリジナルと同じように見えます。
アップデート:
これは間違いなく上の例の年に関連しています。現在の年が入力された場合、時刻は異なります (そして正確です)。1970 年より前が入力された場合、タイムゾーンは無視されます。
これは、 http://msdn.microsoft.com/en-us/library/system.timezone.currenttimezone.aspxのコードに基づく私のタイムゾーン情報のコピーです。
Standard time name: GMT
Daylight saving time name: BST
Current date and time: 2013-10-02 09:27
Daylight saving time? True
Coordinated Universal Time: 2013-10-02 08:27
UTC offset: 01:00:00
Daylight saving time for year 1970:
0001-01-01 00:00 to 0001-01-01 00:00, delta: 00:00:00
1970
7/15/1970 3:00:00 PM
7/15/1970 3:00:00 PM
2005
7/15/2005 3:00:00 PM
7/15/2005 4:00:00 PM
Now
10/2/2013 8:27:09 AM
10/2/2013 9:27:09 AM