簡體   English   中英

將UTC DateTime轉換為本地DateTime

[英]Converting UTC DateTime to local DateTime

我有以下ASP.Net MVC控制器方法:

public ActionResult DoSomething(DateTime utcDate)
{
   var localTime = utcDate.ToLocalTime();
}

問題是localTime將具有與utcDate完全相同的值。 我假設這是因為utcDate不知道它具有UTC值。 所以我的問題是如何將utcDate(我知道是UTC)轉換為本地?

如果您知道 DateTime包含UTC值,則可以使用以下內容

DateTime iKnowThisIsUtc = whatever;
DateTime runtimeKnowsThisIsUtc = DateTime.SpecifyKind(
    iKnowThisIsUtc,
    DateTimeKind.Utc);
DateTime localVersion = runtimeKnowsThisIsUtc.ToLocalTime();

例如,在我當前的應用程序中,我使用SQL的utcnow在我的數據庫中創建時間戳,但是當我將它們讀入我的C#應用​​程序時, Kind proeprty始終是Unknown 我創建了一個包裝器函數來讀取時間戳,故意將其Kind設置為Utc ,然后將其轉換為本地時間 - 基本上如上所述。

請注意,如果以下一個(或兩個)成立, DateTime.ToLocalTime()僅不會影響該值:

  • DateTimeKind屬性是DateTimeKind.Local
  • 您當地的時區是“無變化”是正確的轉換

我想我們可以假設第二點不正確。 因此,似乎iKnowThisIsUtcKind屬性已設置為Local 您需要弄清楚為什么提供給您的這些DateTime認為它們是本地的。

如MSDN所述,您需要將Date的Kind屬性設置為UTC,以使ToLocalTime()工作(並將日期轉換為本地時間.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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM