我有一个以字符串格式返回的日期
string utcdt = "2017-01-01T15:48:00-07:00";
如何从上面的字符串中提取07:00
山地时间并将任何日期格式化为此区域格式?
我不想更改计算机上的时区,因为返回到变量utcdt
的UTC时间可能会有所不同,而我的WinForm应用程序中使用的所有其他日期都需要符合相同的时区规范。
修改
我使用的是FEDEx API,这是日期返回的一种格式
string utcdt = "2017-01-01T15:48:00-07:00";
现在稍后在应用程序中有
foreach (TrackingDateOrTimestamp timestamp in trackDetail.DatesOrTimes)
Console.WriteLine("{0}: {1}", timestamp.Type, timestamp.DateOrTimestamp);
以当地时间返回数据 - 意思是
01/01/2017 17:48:00
我正在努力想出一个让日期保持一致的解决方案。
答案 0 :(得分:1)
您可以使用DateTimeOffset
类将字符串解析为本地时间及其与UTC的偏移量。然后,您可以将偏移量保存为TimeSpan
。
稍后再使用DateTimeOffset
类转换另一个DateTime
您必须使用相同的偏移量:
string dto = "2017-01-01T15:48:00-07:00";
DateTimeOffset dateTimeOffset = DateTimeOffset.Parse(dto);
DateTime utcDateTime = dateTimeOffset.UtcDateTime;
TimeSpan timezoneOffset = dateTimeOffset.Offset;
MessageBox.Show("UTC DateTime: " + utcDateTime);
MessageBox.Show("Offset: " + timezoneOffset);
DateTimeOffset nowWithOffset = DateTimeOffset.UtcNow.ToOffset(timezoneOffset);
MessageBox.Show("Now in other timezone: " + nowWithOffset.ToString("O"));
请注意其他评论员写的内容:这不能正确处理夏令时。为了解决这个问题,你实际上需要知道真正的时区。