我正在尝试使用以下代码在 NodaTime 中使用 LocalDateTime 模式从分区日期时间获取 UTC 时间。
public string getUtcTimeFromZonedTime(string dateTimeString, string timeZoneID,
string dateTimePattern, bool isDateTime)
{
if (string.IsNullOrEmpty(dateTimePattern))
{
if (isDateTime)
{
dateTimePattern = "M/dd/yyyy HH:mm:ss tt";
}
else
{
dateTimePattern = "M/dd/yyyy";
}
}
var pattern = LocalDateTimePattern.CreateWithInvariantCulture(dateTimePattern);
var parseResult = pattern.Parse(dateTimeString);
if (!parseResult.Success)
{
// throw an exception or whatever you want to do
}
var localDateTime = parseResult.Value;
var timeZone = DateTimeZoneProviders.Tzdb[timeZoneID];
// TODO: Consider how you want to handle ambiguous or "skipped" local date/time
// values. For example, you might want InZoneStrictly, or provide your own custom
// handler to InZone.
var zonedDateTime = localDateTime.InZoneLeniently(timeZone);
return zonedDateTime.ToDateTimeUtc().ToString();
}
在下面提到的场景中,我在解析期间遇到异常- 1) 如果模式类似于“MM/dd/yyyy HH:mm:ss tt”并且 DateTime 字符串类似于“5/28/2013 1:02:ss PM” 2) 如果模式类似于“MM-dd-yyyy HH:mm:ss tt”并且 DateTime 字符串类似于“5/28/2013 1:02:ss PM”
对于第一种情况,如果我将模式更改为“M/dd/yyyy HH:mm:ss tt”,它将起作用,但我最终会失去前导零。如果我将模式更改为“MM/dd/yyyy HH:mm:ss tt”,第二种情况将起作用
有没有其他方法可以获取 UTC 值,或者我在这里做错了什么。