我有一个 mysql 数据库,用户可以向其中添加约会记录,并且我希望具有根据用户计算机的时区自动更改约会的 DateTime 值的功能。出于某种原因,我无法让它工作。
我已经尝试过现有的解决方案,但也许我遗漏了什么?随时将日期信息发送到数据库,我将时间转换为 UTC:
private void UpdateAppointment()
{
using (ent = new ScheduleEntities())
{
var currentAppointment = ent.appointments.Attach(AppointmentIndex);
currentAppointment.start = start_TimePicker.Value.ToUniversalTime();
currentAppointment.end = end_TimePicker.Value.ToUniversalTime();
ent.SaveChanges();
}
}
然后在将记录添加到列表之前转换为本地时区:
private void ChangeTimeZone()
{
Debug.WriteLine($"{TimeZone.CurrentTimeZone.StandardName}");
foreach (var item in userAppointments)
{
Debug.WriteLine($"before: {item.start} - {item.end}");
item.start = DateTime.SpecifyKind(item.start, DateTimeKind.Local);
item.end = DateTime.SpecifyKind(item.start, DateTimeKind.Local);
item.start = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(item.start, TimeZone.CurrentTimeZone.StandardName);
item.end = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(item.end, TimeZone.CurrentTimeZone.StandardName);
Debug.WriteLine($"after: {item.start} - {item.end}");
}
}
private void PopulateAppointmentGrid()
{
if (all_Radio.Checked)
{
ChangeTimeZone();
var allQuery = ent.appointments.Where(ap => ap.userId == ActiveUser.userId);
ForEachListItem(allQuery, ap => userAppointments.Add(ap));
}
}
Debug.WriteLine 结果:
- 时区(我手动设置从东部到中部,它会识别变化)
- 之前:早上 8 点
- 之后:上午 8 点
完整代码可以在这里找到: