我有一个使用ASP的mvc项目。. NET默认成员资格提供程序。我试图在视图页面上显示用户的详细信息。当我做
MembershipUser user = Membership.GetUser(id);
获取我要显示的用户,所有的DateTimes (createdate, LastActivityDate)都将Kind属性设置为Local。
所有这些日期都保存在SQL Server数据库在UTC时间,所以为什么他们进入MVC作为本地?它把我的时区转换弄乱了,因为我希望服务器时间是UTC的。
是否有一些你可以设置,让用户从GetUser函数返回将有DateTimeKind.Utc的日期时间?
就用myDate.ToUniversalTime()
如果你的意思是DateTime中的值实际上是UTC时间,但类型被设置为Local,那么你必须将其转换为UTC。
var myUtcDate = DateTime.SpecifyKind(myDate, DateTimeKind.Utc);
不幸的是,这是。net DateTime类和SQL的普遍问题,而不是MVC特有的问题。我不知道有什么方法可以用DateTimeKind获得UTC格式的DateTime。Utc。
你可能想读一下John Skeets关于DateTime的咆哮。
http://noda-time.blogspot.com/2011/08/what-wrong-with-datetime-anyway.html如果您需要经常使用它,一个选项是创建一个扩展方法来完成此操作。
public static class DateTimeExtensions {
public static DateTime MakeUtcKind(this DateTime dateTime) {
return DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
}
}
那么你可以简单地这样做:
var createDate = Membership.GetUser(id).CreationDate.MakeUtcKind();