我有一个 WPF 客户端,它使用来自 WCF 服务的 DateTime 检索数据。
当我将计算机置于罗马时间 (+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;
}
现在对于奇怪...
我使用 ' 值从后面的 XAML 代码中调用'调用代码',DatePicker
如下所示:await DataManager.GetBookingsReport(datePicked.SelectedDate.Value);
我将通过代码调试到BookingsForFollowingDayReportAsync
被调用的位置。
变量forWhen
实际上是 10/01/2013,太棒了!..accept 我在 WCF 服务中的日志记录代码说 09/01/2013 已发送通过。所以然后我取消注释我forWhen
手动设置的行 - 只是为了测试 - 它有效,记录器说 10/01/2013。
我已经测试了几天,明天的日期总是有问题,如果我在我的 DatePicker 中选择三天(过去或未来),例如记录正确的日期。
如果我将时区设置回英国格林威治标准时间,这个错误也根本不会发生。
我有一个想法,它可能与日期选择器有关,因为forWhen
手动设置可以解决问题,但这是怎么发生的呢?
编辑 1
我现在已经设法解决了这个问题,通过forWhen
手动设置,使用forWhen
s Values 像这样(看起来很荒谬):
forWhen = new DateTime(forWhen.Year, forWhen.Month, forWhen.Day);
我对这个问题和我找到的解决方案感到困惑......有什么解释吗?