将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

下一篇: UTC DateTime problems