次のASP.Net MVC Controllerメソッドがあります。
public ActionResult DoSomething(DateTime utcDate)
{
var localTime = utcDate.ToLocalTime();
}
問題は、localTimeがutcDateとまったく同じ値を持つことです。これは、utcDateがUTC値を持っていることを知らないためだと思います。だから私の質問は、utcDate(これはUTCです)をローカルに変換するにはどうすればよいですか?
knowDateTime
にUTC値が含まれている場合、 以下 を使用できます。
_DateTime iKnowThisIsUtc = whatever;
DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind(
iKnowThisIsUtc,
DateTimeKind.Utc);
DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime();
_
たとえば、現在のアプリケーションでは、SQLのutcnow
を使用してデータベースにタイムスタンプを作成しますが、C#アプリケーションに読み込むと、Kind
プロパティは常にUnknown
になります。タイムスタンプを読み取るラッパー関数を作成し、そのKind
をUtc
に意図的に設定し、それを現地時間に変換します-基本的に上記のとおりです。
DateTime.ToLocalTime()
は、次のいずれか(または両方)が成り立つ場合にのみ値に影響を与えないことに注意してください。
DateTime
のKind
プロパティは_DateTimeKind.Local
_2番目の点は真実ではないと推測できると思います。したがって、iKnowThisIsUtc
のKind
プロパティは既にLocal
に設定されているようです。これらのDateTime
sを提供しているものがローカルであると考える理由を理解する必要があります。
mSDNで説明されているように、ToLocalTime()が機能する(そして日付を現地時間に変換するために、DateのKindプロパティがUTCである必要があります。 http://msdn.Microsoft.com/en-us /library/system.datetime.tolocaltime.aspx
これを試して:
utcDate = DateTime.SpecifyKind(utcDate, DateTimeKind.Utc);
var localTime = utcDate.ToLocalTime();
以下を試してください:
public static DateTime UtcToPacific(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
}
太平洋をローカルタイムゾーンに変更します。
マシンに存在するタイムゾーンを確認するには、次のリンクを参照してください。 http://msdn.Microsoft.com/en-us/library/bb397781.aspx
またはこれ:
var localTime = new DateTimeOffset(utcDate,TimeSpan.FromHours(0))
.ToLocalTime().DateTime;