1

ASP.NET の既定のメンバーシップ プロバイダーを使用する MVC3 プロジェクトがあります。ビュー ページにユーザーの詳細を表示しようとしています。私がする時

MembershipUser user = Membership.GetUser(id);

表示しようとしているユーザーを取得するには、すべての DateTimes (CreationDate、LastActivityDate) の Kind プロパティを Local に設定します。

これらの日付はすべて UTC 時間で SQL Server データベースに保存されるのに、ローカルとして MVC に取り込まれるのはなぜですか? サーバーの時刻が UTC であることを期待しているため、タイム ゾーンの変換が台無しになっています。

GetUser 関数から返されたユーザーが DateTimeKind.Utc に DateTimes を持つように設定できるものはありますか?

4

1 に答える 1

1

使うだけmyDate.ToUniversalTime()

DateTime の値が実際には UTC 時間であるが、種類が Local に設定されている場合は、それを UTC に変換する必要があります。

var myUtcDate = DateTime.SpecifyKind(myDate, DateTimeKind.Utc);

残念ながら、これは .NET DateTime クラスと SQL の一般的な問題であり、MVC に固有の問題ではありません。DateTimeKind.Utc が設定された UTC 形式で DateTime を取得する方法がわかりません。

DateTime に関する John Skeets の暴言を読みたいと思うかもしれません。

http://noda-time.blogspot.com/2011/08/what-wrong-with-datetime-anyway.html

これを頻繁に使用する必要がある場合、1 つのオプションは、これを行うための拡張メソッドを作成することです。

public static class DateTimeExtensions {
    public static DateTime MakeUtcKind(this DateTime dateTime) {
        return DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
    }
}

次に、これを簡単に行うことができます:

var createDate = Membership.GetUser(id).CreationDate.MakeUtcKind();
于 2013-05-29T19:45:56.243 に答える