2017-04-13 63 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