【发布时间】:2019-07-05 09:24:39
【问题描述】:
从冬季时间切换到夏季时间时,我很难获得正确的 datetimeoffset。
我要做的是向 API 发送请求,参数是两个日期,格式如下:“2018-03-01T01:00:00+01:00”
我在巴黎时区创建了两个 Datetimeoffset(我的电脑在英国,但 API 是法国服务),我是这样做的:
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Romance Standard Time");
DateTime dt = new DateTime(2018,03,01,00,00,00);
dt = DateTime.SpecifyKind(dt, DateTimeKind.Local);
DateTimeOffset startingDate = new DateTimeOffset(dt);
startingDate = TimeZoneInfo.ConvertTime(startingDate, timeZoneInfo);
DateTimeOffset endingDate = new DateTimeOffset();
for (int i = 0;i<700;i++)
{
startingDate = startingDate.AddMonths(i);
endingDate = startingDate.AddMonths(1);
IRestResponse myquery= getAPIresult("", "", startingDate.ToString("yyyy-MM-ddTHH:mm:sszzzzzz"), endingDate.ToString("yyyy-MM-ddTHH:mm:sszzzzzz"));
执行代码时,我得到“2018-03-01T01:00:00+01:00”作为startingDate,这是我所期望的。
但是我得到“2018-04-01T01:00:00+01:00”作为结束日期,这很奇怪,因为 3 月 31 日是法国的夏令时,所以巴黎时区是从 GMT+01 到 GMT+02。
所以我应该得到“2018-04-01T01:00:00+02:00”作为结束日期。
如果您能在这方面帮助我,我将不胜感激。
【问题讨论】:
-
IsDaylightSavingTime方法在这里可能会有所帮助 -
我不确定你的答案@IDarkCoder,[link]IsDateTimeOffset 只会返回一个布尔值,我该如何使用它?
-
如果它的夏令时那么它的时区 +1 否则不是(除了那些半小时轮班的地方)
-
2018 年夏令时开始于 25.03 而不是 01.04
-
@Zoomzoom - 所有有效的时区标识符都是自洽的。如果 DST 规则在它们适用的区域之间存在差异,则相应地会有不同的标识符。对于
"Romance Standard Time",对应的英文显示名称为"(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",适用于比利时、丹麦、西班牙和法国(各自的大陆,加上休达)。所有这些地区都是 CET/CEST 时区的欧盟国家,目前 DST 生效。
标签: c# timezone datetimeoffset