繁体   English   中英

从字符串捕获UTC时间并将其格式化为所有DateTime

[英]Capture UTC Time From String And Format All DateTime To It

我有一个以字符串格式返回的日期

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

我正在尝试提出一种解决方案,以使日期保持一致。

您可以使用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"));

请注意其他评论者写了什么:这不能正确处理夏时制。 为了解决这个问题,您实际上需要知道实时时区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM