我有一个包含 CTE 格式日期时间的字符串,我想将其转换为日期时间对象,然后获取 UTC 格式的日期时间。
我尝试了下面的代码,它完成了转换。但问题是在昼夜节律变化前后,由于时间变化,它认为时间无效。
DateTime.TryParseExact
(
myDate,"yyyyMMdd",CultureInfo.InvariantCulture.DateTimeStyles.None)、
DateTimeStyles.None, out var date
);
var unSpecifiedKing = DateTime.SpecifyKind(date, DateTimeKind.Unspecified);
var utcDate = TimeZoneInfo.ConvertTimeToUtc(unSpecifiedKing, tzi);
string myDate = "20230312013000"; // 示例 CTE 日期时间字符串
// 定义用于解析的自定义日期时间格式
string format = "yyyyMMddHHmmss";
if (DateTime.TryParseExact(myDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime))
{
// 将 DateTimeKind 设置为 Unspecified
DateTime unspecifiedDateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified);
// 将未指定的时间转换为 UTC
DateTime utcDateTime = TimeZoneInfo.ConvertTimeToUtc(unspecifiedDateTime);
Console.WriteLine("UTC 日期时间:" + utcDateTime.ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
Console.WriteLine("无法解析日期时间字符串。");
}
说明:
-
自定义格式字符串:
format = "yyyyMMddHHmmss"
用于匹配 CTE 日期时间字符串的格式(年年年年月月日日时时分分秒秒)。 -
TryParseExact
: 使用TryParseExact
方法,并提供自定义格式字符串来解析 CTE 日期时间字符串。 -
DateTime.SpecifyKind
: 将解析后的日期时间的Kind
属性明确设置为DateTimeKind.Unspecified
,因为它不包含时区信息。 -
TimeZoneInfo.ConvertTimeToUtc
: 使用TimeZoneInfo.ConvertTimeToUtc
方法将未指定的时间转换为 UTC。
重要提示:
- 确保 CTE 日期时间字符串始终使用一致的格式。
- 此代码假设 CTE 日期时间字符串不包含时区信息。如果包含时区信息,则需要相应地调整代码。
通过使用自定义格式字符串和明确指定
DateTimeKind
,可以正确解析 CTE 日期时间字符串并将其转换为 UTC,而不会受到夏令时的影响。