EF中的日期时间转换

时间:2018-01-11 19:34:11

标签: entity-framework

我在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获取日期,但我不知道如何添加两次....任何想法?

1 个答案:

答案 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分