以下代码段在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#转换吗?
答案 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时间,如果可以的话,最好使用