Я получаю DateTime от клиента: DateTime CurrentTimeOnClient
У меня есть DateTimeOffset я получаю из БД: DateTimeOffset DateTimeOffsetFromDb
Сравнение Даты только на DateTime/DateTimeOffset объектов
Мне нужно сравнить две даты, ИГНОРИРОВАНИЕ время и часовой пояс. Другими словами, мне просто нужна сырая дата от обоих объектов. Я попытался с помощью FooDateTimeOffset.DateTime.Date
, но это, кажется, еще фактор времени, так что я теперь это:
DateTimeOffset clientDateTimeOffSet = DateTime.SpecifyKind(CurrentTimeOnClient, DateTimeKind.Utc);
clientDateTimeOffSet = await RemoveTimeComponentFromDateTimeOffset(clientDateTimeOffSet);
clientDateTimeOffSet = await SetTimeZoneOffsetToZero(clientDateTimeOffSet);
И вспомогательные методы:
public async Task<DateTimeOffset> SetTimeZoneOffsetToZero(DateTimeOffset dateTimeOffSetObj)
{
TimeSpan zeroOffsetTimeSpan = new TimeSpan(0, 0, 0, 0, 0);
return dateTimeOffSetObj.ToOffset(zeroOffsetTimeSpan);
}
public async Task<DateTimeOffset> RemoveTimeComponentFromDateTimeOffset(DateTimeOffset dateTimeOffSetObj)
{
DateTime dateWithZeroedTime = new DateTime(dateTimeOffSetObj.Year, dateTimeOffSetObj.Month, dateTimeOffSetObj.Day, 0, 0, 0);
return dateWithZeroedTime;
}
Тогда я очистить DateTimeOffset OBJ из БД таким же образом (хотя, очевидно, без необходимости их преобразования) и сравнить их.
bool foo = dateFromDb > dateFromClient;
P.S. Я знаю, что на эти вопросы ответили отдельно, но я хотел бы посмотреть, не сделал ли я вопиющих ошибок или если я переусердствовал. (но опять же, предлагаемое решение .Date
, похоже, не работает).
Edit: @James
//TESTING
var testDateAndTime = new DateTimeOffset(2008, 5, 1, 8, 6, 32,new TimeSpan(1, 0, 0));
//This is just some db object that has a date field that I had on hand
var anncmnt = db.Announcements.First(a => a.Id == 13);
//CLEAN TIME AND DATE
testDateAndTime = testDateAndTime.DateTime.Date;
anncmnt.EndDate = testDateAndTime;
await db.SaveChangesAsync();
//TESTING
Db Результат: 2008-05-01 00:00:00.0000000 -04:00
Почему эти методы «асинк»? Без каких-либо утверждений 'await', которые будут запускаться синхронно. – juharr
Наш API - асинхронный, поэтому мы помогаем асинхронным помощникам, если нам нужно использовать их с асинхронными конечными точками. Насколько я знаю, они выполняются синхронно (по умолчанию, если ожидание не используется). – VSO
Но нет смысла делать что-то «асинк», если это не так. Это просто даст любому, кто использует ваш API, впечатление, что оно есть. – juharr