2013-04-16 3 views
0

У меня есть список сообщений, в которых сообщения имеют поле «ДатаДобавлено», установленное в UTC. Мне нужно отфильтровать сообщения за определенный месяц/год. Часть, с которой я борюсь, - это то, как я буду учитывать учетную запись текущего пользователя (включая летнее время).Фильтрация по дате - с учетом времени пользователя

Вот переменные, которые должны быть рассмотрены:

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

Я был бы признателен, если кто-то может показать мне правильный способ сделать это. Thanks

ответ

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); 
+0

Вот что я искал. благодаря – nfplee

1

Почему бы не использовать класс C# DateTime? Он должен обрабатывать все это для вас, и у него есть функция сравнения?

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

Она имеет несколько конструкций в зависимости от степени точности вы знаете время.

Вы можете использовать LINQ для фильтрации List.

EDIT: Для преобразования временной зоны http://msdn.microsoft.com/en-us/library/bb397769.aspx

+1

И как это вообще касается вопроса ОП о часовых поясах? –

+0

Спасибо, но я уже так много знаю. Я спрашиваю, как это можно сделать, а не то, что мне нужно сделать. – nfplee