WCF サービスから DateTime を使用してデータを取得する WPF クライアントがあります。
コンピューターをローマ時間 (+1) にすると、結果に奇妙な動作が見られます。
私のWCFメソッド
public IEnumerable<BookingType> BookingsForFollowingDayReport(DateTime date) {
el = new ErrorLogging();
el.CreateLog(db, new Entities.ErrorType() { DateLogged = DateTime.Now, Type = "DTE", Message = "Report Date: " + date.ToString() });
var a = (from b in db.GetTable<BookingType>()
where b.TourStartDateTime >= date.Date && b.TourStartDateTime <= date.AddDays(1).Date
orderby b.TourStartDateTime
select b);
if (a.Count() > 0) {
el.CreateLog(db, new Entities.ErrorType() { DateLogged = DateTime.Now, Type = "DTE", Message = "Report Date: " + a.FirstOrDefault().TourStartDateTime });
}
return a;
}
このサービスはどこかの Web サーバーでオンラインになっており、現在は WPF クライアントから呼び出しています。メソッド内のログに注意してください。
私の通話コード
public static async Task<Bookings> GetBookingsReport(DateTime forWhen) {
Bookings bookings = new Bookings();
if (MyNetwork.IsOnline) {
var bookingTypes = new ReportsServiceClient.BookingType[0];
//forWhen = new DateTime(2013, 01, 10);
bookingTypes = await ReportsServiceClient.BookingsForFollowingDayReportAsync(forWhen);
bookings.TourBookings = (from b in bookingTypes
where b.RecordType == "H"
select new Booking(b)).ToList();
}
return bookings;
}
さて、奇妙さのために...
DatePicker
次のように の値を使用して、XAML コード ビハインドから「呼び出し元のコード」を呼び出しawait DataManager.GetBookingsReport(datePicked.SelectedDate.Value);
ますBookingsForFollowingDayReportAsync
。
変数forWhen
は実際には 2013 年 10 月 1 日です。..WCF サービスのログ コードを受け入れると、2013 年 9 月 1 日が送信されたと表示されます。それで、forWhen
手動で設定した行のコメントを外します-テストするだけです-そしてそれは機能します、ロガーは10/01/2013と言います。
これを数日間テストしましたが、DatePicker で 3 日先 (過去または未来) を選択すると、明日の日付に常に問題が発生します。たとえば、正しい日付が記録されます。
タイムゾーンを英国の GMT 時間に戻すと、このバグはまったく発生しません。
forWhen
手動で設定すると問題が解決するため、日付ピッカーに関係している可能性があると思いますが、これはどのように発生するのでしょうか?
編集1
私はforWhen
手動で設定することで、問題を解決することができましたforWhen
。
forWhen = new DateTime(forWhen.Year, forWhen.Month, forWhen.Day);
私は問題と私が見つけた解決策に当惑しています...何か説明はありますか?