ASP.NET成员返回DateTime并将Kind设置为Local



我有一个使用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();

最新更新