0

投稿に「DateAdded」フィールドがあり、UTC 時間に設定されている投稿のリストがあります。特定の月/年の投稿をフィルタリングする必要があります。私が苦労している部分は、現在のユーザーのタイムゾーン (夏時間を含む) をどのように考慮するかということです。

考慮する必要がある変数は次のとおりです。

List<Post> posts = ...;
TimeZoneInfo userTimeZone = ...;
int year = ...;
int month = ...;

誰かがこれを行う正しい方法を教えていただければ幸いです。ありがとう

4

2 に答える 2

1

DateTimeクエリの値を UTC に変換し、それをフィルタリングするだけです。

// here are some posts
List<Post> posts = new List<Post>
{
    new Post {DateAdded = new DateTime(2013, 1, 1, 0, 0, 0, DateTimeKind.Utc)},
    new Post {DateAdded = new DateTime(2013, 2, 1, 0, 0, 0, DateTimeKind.Utc)},
    new Post {DateAdded = new DateTime(2013, 2, 2, 0, 0, 0, DateTimeKind.Utc)},
    new Post {DateAdded = new DateTime(2013, 3, 1, 0, 0, 0, DateTimeKind.Utc)},
    new Post {DateAdded = new DateTime(2013, 3, 2, 0, 0, 0, DateTimeKind.Utc)},
    new Post {DateAdded = new DateTime(2013, 3, 3, 0, 0, 0, DateTimeKind.Utc)},
};

// And the parameters you requested
TimeZoneInfo userTimeZone = TimeZoneInfo
                                .FindSystemTimeZoneById("Central Standard Time");
int year = 2013;
int month = 2;

// Let's get the start and end values in UTC.
DateTime startDate = new DateTime(year, month, 1);
DateTime startDateUtc = TimeZoneInfo.ConvertTimeToUtc(startDate, userTimeZone);
DateTime endDate = startDate.AddMonths(1);
DateTime endDateUtc = TimeZoneInfo.ConvertTimeToUtc(endDate, userTimeZone);

// Filter the posts to those values.  Uses an inclusive start and exclusive end.
var filteredPosts = posts.Where(x => x.DateAdded >= startDateUtc &&
                                     x.DateAdded < endDateUtc);
于 2013-04-16T16:43:29.777 に答える
1

C# のDateTimeクラスを使用してみませんか? このすべてを処理する必要があり、比較機能がありますか?

http://msdn.microsoft.com/en-us/library/system.datetime.compare.aspx

時間を知っている精度に応じて、複数の構造があります。

LINQ を使用して のフィルタリングを行うことができますList

編集:タイムゾーン変換用http://msdn.microsoft.com/en-us/library/bb397769.aspx

于 2013-04-16T16:12:37.370 に答える