2017-04-13 70 views
0

在以下實際代碼視圖部分中,我將FormattedStartTime值至少比應該的值多出4個小時。如果實際值是下午2點那麼它會顯示18:00而不是15:00。我該如何解決這個問題?開始時間值不正確

Model: 

public DateTime? StartDate { get; set; } 

public string FormattedStartTime => StartDate?.ToString("HH:mm"); 

public bool HideTimestamp { get; set; } 

     View: 

     if (!Model.HideTimestamp) 
        { 
         <span>@Model.FormattedStartDate @Model.FormattedStartTime</span> 
       } 
+3

這必須是一個時區問題。 – Tobiq

+0

如何解決這個時區問題?我可以在某個地方減去小時嗎? – user7832038

+0

https://www.google.co.uk/search?q=public+string+FormattedStartTime+%3D%3E+StartDate%3F.ToString(%22HH%3Amm%22)%3B&oq=public+string+FormattedStartTime+%3D %3E + StartDate%3F.ToString(%22HH%3Amm%22)%3B&aqs = chrome..69i57&sourceid = chrome&ie = UTF-8#q = c%23 ++ offset + datetime + timezone + – Tobiq

回答

0

你應該能夠適當的文化得到它。您的服務器或應用程序設置在不同的時區。

CultureInfo ci = new CultureInfo("en-US"); 
DateTime myDate = DateTime.Now; 
string FormattedDate = myDate.ToString("HH:mm", ci); 

您應驗證您的變量以及它可能爲空。

+0

它不起作用,因爲開始時間值是相同的並且不會更改。 – user7832038

+0

文化不影響時區。它們是正交的 –

+0

來自FormattedStartTime的時間是UTC時間。我需要將這個時間以UTC時間的字符串值轉換爲東部時區的本地時區時間。我怎樣才能做到這一點?? – user7832038

0

我遇到了一個時區偏移問題,影響了正在顯示的內容。我們沒有使用Razor將時間打印爲HTML,而是在Angular應用程序中通過JSON傳遞。但是,如果您使用AJAX發佈時間到服務器,則會遇到同樣的問題。 (如果您要將JSON發送回客戶端,則時間偏移量會加倍。)

假設您正在使用Newtonsoft(如果您不是,那麼您應該)爲您的JSON序列化,您可以添加以下,無論你設置你的棧(Global.asax中,OWIN等):

GlobalConfiguration.Configuration 
        .Formatters 
        .JsonFormatter 
        .SerializerSettings 
        .Converters 
        .Add(new IsoDateTimeConverter 
        { 
         DateTimeStyles = DateTimeStyles.AdjustToUniversal 
        }); 

什麼是DateTimeStyles.AdjustToUniversal將要做的就是改變串行器,使其轉換正在從模型發送到/回的任何日期UTC時間設置屬性之前。這將消除在服務器設置的時區之外發生操作時可能發生的時區偏移。

+0

我看到的所有代碼都是默認值,所以不必更改或添加任何內容到默認代碼。不知何故,默認代碼沒有從後端顯示適當的值。 – user7832038

+0

你看到的所有代碼默認在哪裏? – krillgar