Je reçois un DateTime du client: DateTime CurrentTimeOnClient
J'ai un DateTimeOffset que je reçois de la db: DateTimeOffset DateTimeOffsetFromDb
Comparaison des dates seulement sur DateTime/DateTimeOffset Objets
je dois comparer les deux dates, Indifférence le temps et fuseau horaire. En d'autres termes, je veux juste la date brute des deux objets. J'ai essayé d'utiliser FooDateTimeOffset.DateTime.Date
mais il semble au facteur encore dans le temps, donc ce que j'ai maintenant est la suivante:
DateTimeOffset clientDateTimeOffSet = DateTime.SpecifyKind(CurrentTimeOnClient, DateTimeKind.Utc);
clientDateTimeOffSet = await RemoveTimeComponentFromDateTimeOffset(clientDateTimeOffSet);
clientDateTimeOffSet = await SetTimeZoneOffsetToZero(clientDateTimeOffSet);
Et les méthodes helper:
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;
}
Puis-je nettoyer le DateTimeOffset obj de la db de la même manière (mais évidemment sans avoir besoin de les convertir) et les comparer.
bool foo = dateFromDb > dateFromClient;
P.S. Je suis conscient que ces questions ont été répondues séparément, mais je voudrais voir si j'ai fait des erreurs flagrantes ou si j'en exagère. (mais encore une fois, la solution suggérée .Date
ne semble pas fonctionner).
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 Résultat: 2008-05-01 00:00:00.0000000 -04:00
Pourquoi ces méthodes 'async'? Sans les instructions 'await' qui vont simplement s'exécuter de manière synchrone. – juharr
Notre API est asynchrone, donc nous faisons des asynchrones au cas où nous aurions besoin de les utiliser avec des endpoints asynchrones. Ceux-ci s'exécutent de manière synchrone (par défaut si l'attente n'est pas utilisée) autant que je sache. – VSO
Mais il ne sert à rien de faire quelque chose d'asynchrone si ce n'est pas le cas. Cela donnera à n'importe qui utilisant votre API l'impression que c'est le cas. – juharr