在视图部分下面的实际代码中,我得到的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>
}
答案 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时间。这将消除在服务器设置的时区之外发生操作时可能发生的时区偏移。