将Kind设置为本地的ASP.NET成员资格返回DateTime
我有一个使用ASP.NET默认成员资格提供程序的MVC3项目。 我正试图在View页面上显示用户的详细信息。 当我做
MembershipUser user = Membership.GetUser(id);
为了得到我要显示的用户,所有的DateTime(CreationDate,LastActivityDate)都将Kind属性设置为Local。
所有这些日期都以UTC时间保存在SQL Server数据库中,那么为什么它们会以Local的形式进入MVC? 这是搞乱了我的时区转换,因为我期望服务器时间在UTC。
有没有什么可以设置的,以便从GetUser函数返回的用户在DateTimeKind.Utc中有DateTimes?
只需使用myDate.ToUniversalTime()
如果您的意思是DateTime中的值实际上是UTC时间,但该类型设置为Local,那么您必须将其转换为UTC。
var myUtcDate = DateTime.SpecifyKind(myDate, DateTimeKind.Utc);
不幸的是,这是.NET DateTime类和SQL的一个普遍问题,而不是MVC的特定问题。 我不知道如何设置DateTimeKind.Utc以UTC格式获取DateTime。
你可能想阅读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();
链接地址: http://www.djcxy.com/p/46637.html
上一篇: ASP.NET membership returning DateTime with Kind set to Local