아래 코드를 사용하여 NodaTime의 LocalDateTime 패턴을 사용하여 존 (zone) datetime에서 UTC 시간을 얻으려고합니다.Zoned dateTime to UTC Time - LocalDateTimePattern 예외가 발생합니다.
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();
}
나는 동안 구문 분석하는 동안 예외가 아래에 언급 scenarios- 1) 패턴이 "MM/DD/YYYY의 HH : MM : SS의 TT"와 같은 경우와 날짜 시간 문자열은 "같은 것입니다 28분의 5/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"로 변경하면 작동하지만 맨 앞의 0은 사라집니다. 패턴을 "MM/dd/yyyy HH : mm : ss tt"로 변경하면 두 번째 경우가 작동합니다.
UTC 값을 가져 오는 다른 방법이 있습니까? 아니면 여기에서 잘못된 것이 있습니다.
예 Jon, 이전 패턴을 수정했으며 현재 "M/dd/yyyy h : mm : ss tt"패턴을 사용하고 있습니다. 또한 NodaTime을 사용하여 datetime 문자열에서 UTC를 얻는 다른 방법이 있는지 알고 싶었습니다. – Lakshman
LocalDateTimePattern.CreateWithInvariantCulture (dateTimePattern)을 사용하여 ZonedDateTime 문자열을 구문 분석하면 서버 시간에 DateTime 값을 얻을 수 있습니까? – Lakshman
@Lakshman : 아니요, 'LocalDateTime'을 제공합니다. 이것을 'ZonedDateTime'으로 변환하려면 시간대를 지정해야합니다. 또는 1.2를 사용하면 템플릿 값의 영역을 사용하거나 텍스트 자체의 영역 식별자를 사용하여 'ZonedDateTime'을 직접 파싱 할 수 있습니다. –