私はクライアントからの日時を受け取るオブジェクトの時間を無視して、私は2つの日付を比較する必要がDateTimeOffset DateTimeOffsetFromDb
比較日付は
をANDタイムゾーン。つまり、私は両方のオブジェクトからの生の日付がほしいです。私は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
の解決策は機能していないようです)。
編集:@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