我在Sql server中有三个表 用户:UserId,UserName,Password,TimeZoneId(对时区主键的引用)
时区:TimezoneId,时区 (值ID; 1,2,3,TimeZone: - 05:30,12:00,-07:00)
会议:MeetingId,MeetingFromid,MeetingToid,MeetingStarttime,MeetingEndtime
登录后,当我添加新会议时,如果我在会议开始时间添加4:00,那么该用户的时区也应该添加,同样的结束时间,这里是我的帖子操作方法控制器:
[HttpPost]
public ActionResult Dashboard(Meeting model)
{
var id = Convert.ToInt32(Session["UserId"]);
var timezone = db.Users.Where(u => u.UserId == id).Select(u => u.TimeZone.TimeZone1); //here i get timezone of logged in user (5:30 for user1)
return View();
}
现在,如果我将MeetingStartTime添加为5:00,MeetingEndTime添加为7:00,那么会议桌中的条目应该是10:30,12:30,我将通过DateTime.Now.Date获取日期,但我不知道如何添加两次....任何想法?
答案 0 :(得分:0)
您不应为会议保存任何偏移/时区。您只需要保存通用时间(UTC)。 用户应该选择(或操作系统),他想看到哪个时区:
// Some date..
DateTime myDate = DateTime.Now;
// Save this in your DB
DateTime utcDate = myDate.ToUniversalTime();
// When reading, convert to the local time.
DateTime myDate2 = utcDate.ToLocalTime();
TimeZone someOtherTimezone = TimeZone.CurrentTimeZone;
// Show date in other timezone
DateTime myDate3 = someOtherTimezone.ToLocalTime(utcDate);
如果我计划在下午2点在德国开会。我会在db中保存下午1点。 如果您想知道会议何时开始,请询问utc(下午1:00)。如果你在德国(UTC + 1)你选择德国时区并计算当地时间:下午2点。 如果您坐在纽约并想参加电话会议,您会要求UTC时间(下午1:00)并计算您当地时间:UTC-5 =>上午07点00分