DateTime to time_t在c ++端产生Hour:2

时间:2015-05-13 07:30:51

标签: c# c++

以下代码段在c#中将DateTime转换为time_t。 在C ++中,我使用localtime_s将其转换回来,我得到tm_hour = 2,为什么?

I convert: DateTimeUtils.Secs(DateTime.Parse("2015-05-01"))

public static Int64 Secs(DateTime dt)
    {
      var delta = dt - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
      return Convert.ToInt64(delta.TotalSeconds);
    }

time_t DropTimeFromDate(time_t time)
    {
        struct tm timeInfo;
        localtime_s(&timeInfo, &time);              

        timeInfo.tm_hour = 0;
        timeInfo.tm_min = 0;
        timeInfo.tm_sec = 0;        

        return mktime(&timeInfo);               
    }

我应该以某种方式修复c#转换吗?

1 个答案:

答案 0 :(得分:0)

我在英国,目前是UTC + 1:00(英国夏令时间),运行你的代码我得到的tm_hour为1而不是2,我只能猜测是因为我们处于不同的时区(UTC + 1并不总是UTC + 1,时区只是一般的头痛)

无论哪种方式问题都归结为你用来转换回time_t的C ++或C代码 - C#代码很好

如果你改变了     localtime_s(& timeInfo,time) 至     gmtime_s(& timeInfo,time)

你应该有更好的运气,后者会忽略当前时区,只是将该值视为原始UTC时间,如果可以的话,最好使用