开始时间值不正确

时间:2017-04-13 16:35:33

标签: c# asp.net asp.net-mvc razor

在视图部分下面的实际代码中,我得到的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>
                }

2 个答案:

答案 0 :(得分:0)

你应该能够通过适当的文化来做到正确。您的服务器或应用程序设置在不同的时区。

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

您应该验证您的变量,也可以为null。

答案 1 :(得分: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时间。这将消除在服务器设置的时区之外发生操作时可能发生的时区偏移。