我有一個帖子列表,其中帖子的「DateAdded」字段已被設置爲UTC時間。我需要篩選特定月份/年的帖子。我掙扎的部分是我如何考慮當前用戶的時區(包括夏令時)。按日期過濾 - 考慮到用戶的時區
下面是需要的變量加以考慮:
List<Post> posts = ...;
TimeZoneInfo userTimeZone = ...;
int year = ...;
int month = ...;
我會很感激,如果有人可以告訴我正確的方法來做到這一點。謝謝
我有一個帖子列表,其中帖子的「DateAdded」字段已被設置爲UTC時間。我需要篩選特定月份/年的帖子。我掙扎的部分是我如何考慮當前用戶的時區(包括夏令時)。按日期過濾 - 考慮到用戶的時區
下面是需要的變量加以考慮:
List<Post> posts = ...;
TimeZoneInfo userTimeZone = ...;
int year = ...;
int month = ...;
我會很感激,如果有人可以告訴我正確的方法來做到這一點。謝謝
您只需將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);
爲什麼不使用C#的DateTime
類?它應該爲你處理所有這些,它有一個比較功能?
http://msdn.microsoft.com/en-us/library/system.datetime.compare.aspx
它依賴於準確的,你知道時間的程度多種建築物。
您可以使用LINQ進行List
的過濾。
編輯:時區的轉換http://msdn.microsoft.com/en-us/library/bb397769.aspx
這是如何解決OP關於時區的問題? –
謝謝,但我已經知道了很多。我在問如何做,而不是我需要做什麼。 – nfplee
這就是我一直在尋找的。謝謝 – nfplee