我需要解析一个包含时间戳的文件,例如:“ 09.06.2019 00:00:00”。提供这些文件的人告诉我,这些时间戳位于UTC + 1(无DST)的“ CET”时区中。如何将时间戳解析为相应的DateTime对象?到目前为止,我想到的唯一可能的解决方案是将它们解析为UTC,然后将其手动添加到DateTime对象1小时,但这真的是一个很好的选择吗?
非常感谢!
答案 0 :(得分:1)
帮自己一个忙[strong]未来,并在处理时区时使用DateTimeOffset
(而不是DateTime
)。
Microsoft a whole article解释了与日期/时间相关的不同结构。
就解析为TimeZoneOffset
而言,有几种不同的方法,但最直接的方法是仅使用ParseExact()
或TryParseExact()
。
var dateStr = "09.06.2019 00:00:00";
var success = DateTimeOffset.TryParseExact(
dateStr + " +01:00", // Append the desired timezone to the string
"dd.MM.yyyy HH:mm:ss zzz", // The format to parse, including Timezone in the end
null,
DateTimeStyles.None, // Strict style. You can also specify how tolerant it is to whitespace
out DateTimeOffset result // Store it in new variable
);
if (success)
{
// Manipulate into DateTime of different zones.
Debug.WriteLine(result.DateTime); // 12am of 09 June 2019
Debug.WriteLine(result.UtcDateTime); // 11am the previous day, because result is in UTC+1 timezone
Debug.WriteLine(result.LocalDateTime); // Converted to your local timezone
// You could also pretty much convert into any other zones
// using the ToOffset() method.
}
答案 1 :(得分:1)
使用DateTimeOffset
和TimeZoneInfo
将日期字符串转换为带有中欧时间偏移的DateTimeOffset
。
string dateString = "09.06.2019 00:00:00";
// get timezone for Central European Time
TimeZoneInfo cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
// parse to local DateTimeOffset
var localDateTime = DateTimeOffset.ParseExact(dateString, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);
// get the UTC Offset value
var utcOffset = cet.GetUtcOffset(localDateTime.DateTime);
// convert to DateTimeOffset with CET timezone offset
var dateTimeWithTimeZone = new DateTimeOffset(localDateTime.DateTime, utcOffset);
// result dateTimeWithTimeZone.ToString()
// 12/09/2019 00:00:00 +01:00
此方法将正确处理夏令时(DST)。
答案 2 :(得分:0)
您可以使用:
DateTime dateTime = new DateTime(2010, 1, 1, 0, 1, 0,DateTimeKind.Unspecified);
dateTime=TimeZoneInfo.ConvertTimeToUtc(dateTime,
TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"));
这可用于从文件中获取日期并将其保存为Utc时间中的DateTime对象。