TimeZoneInfo
conversionscでCountry + "Standard Time"として使用する適切なタイムゾーン名を見つけるには、レジストリを調べる必要があります。
キーHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
には、サポートされているすべてのタイムゾーンの名前が含まれています。マイクロソフトはフィジーが最近DSTを変更したという情報をリリースしたことに注意してください。
これを過度に複製していますか?
string date = newDateTime.ToUniversalTime().ToString("u");
DateTime localDateTime = DateTime.Parse(date);
これが動作するかどうかを参照してください... DateTime
はUTCで保存されている場合は、私は以下の静的クラスに追加いくつかの機能を使用することができ
。ここで
DateTime utcDateTime=ReadeFromDatabaseAsUTC();
TimeZoneInfo localTimeZoneInfo=new TimeZoneInfo("New Zealand Standard Time");
DateTime localDateTime= TimeZoneConversion.FromUTCToSpecificTimeZone(localTimeZoneInfo,utcDateTime);
localDateTime=localDateTime.Add(TimeSpan.Parse(Time));
utcDateTime=TimeZoneConversion.FromSpecificTimeZoneToUTC(localTimeZoneInfo,localDateTime);
SaveToDatabaseAsUTC(utcDateTime);
は、コンバージョンを支援するために使用できる便利なクラスです:
public static class TimeZoneConversion
{
public static System.DateTime FromSpecificTimeZoneToUTC(string specificZone, System.DateTime specificTimeZoneDateTime)
{
TimeZoneInfo fromZone = TimeZoneInfo.FindSystemTimeZoneById(specificZone);
return TimeZoneInfo.ConvertTimeToUtc(specificTimeZoneDateTime, fromZone);
}
//--------------------------------------------------------------------------------------------
public static System.DateTime FromSpecificTimeZoneToUTC(TimeZoneInfo fromZone, System.DateTime specificTimeZoneDateTime)
{
System.DateTime temp = System.DateTime.SpecifyKind(specificTimeZoneDateTime, DateTimeKind.Unspecified);
return TimeZoneInfo.ConvertTimeToUtc(temp, fromZone);
}
//--------------------------------------------------------------------------------------------
public static System.DateTime FromUTCToSpecificTimeZone(TimeZoneInfo toZone, System.DateTime UTCTimeZoneDateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(UTCTimeZoneDateTime, toZone);
}
//--------------------------------------------------------------------------------------------
public static TimeSpan GetTimeZoneOffsetDifference(TimeZoneInfo oldZone, TimeZoneInfo newZone)
{
var now = DateTimeOffset.UtcNow;
TimeSpan oldOffset = oldZone.GetUtcOffset(now);
TimeSpan newOffset = newZone.GetUtcOffset(now);
TimeSpan difference = oldOffset - newOffset;
return difference;
}
//--------------------------------------------------------------------------------------------
public static System.DateTime FromUTCToSpecificTimeZone(string totimezone, System.DateTime UTCTimeZoneDateTime)
{
TimeZoneInfo toZone = TimeZoneInfo.FindSystemTimeZoneById(totimezone);
return TimeZoneInfo.ConvertTimeFromUtc(UTCTimeZoneDateTime, toZone);
}
//--------------------------------------------------------------------------------------------
public static System.DateTime FromLocalTimeZoneToUTC(System.DateTime localDateTime)
{
return localDateTime.ToUniversalTime();
}
//--------------------------------------------------------------------------------------------
public static string GetServerTimeZoneID()
{
return TimeZone localZone = TimeZone.CurrentTimeZone.StandardName;
}
//--------------------------------------------------------------------------------------------
}
なぜ、 'string'に普遍的な時間を書いて、それを' DateTime'に解析するのですか?具体的に 'utcDateTime'は' newDateTime.ToUniversalTime() 'と同じではないでしょうか? – juharr
このコードはインディアン対フィジーtime.couldのために働いていない私のためのコードを書き留めて –
This - > Country + "Standard Time";動作しないでしょう。タイムゾーン情報を見つけるための特定の名前/キーがあります。あなたがやっているやり方で文字通りに国を追いつくことはできません。あなたがテストしている世界の領域にあるタイムゾーン名を見つける必要があります。 –