2017-10-26 13:32:11 Etc/GMT
형식의 날짜가 포함 된 JSON을 deserialize하려고합니다. NodaTime은 Json.NET 및 NodaTime.Serialization.JsonNet과 결합 할 때 이것을 지원하는 것으로 보입니다. 다른 두 패키지를 사용하여 JSON 직렬화 복원에이 예제를 확장 할 때 NodaTime.Serialization.JsonNet이 사용자 지정 날짜 형식으로 작업하도록 만들기
var date = "2017-10-26 13:32:11 Etc/GMT";
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
"yyyy'-'MM'-'dd HH':'mm':'ss z",
DateTimeZoneProviders.Tzdb
);
var result = pattern.Parse(date);
그러나, 나는 그것이 동작하지 않습니다 : 난 단지 NodaTime 사용, 여기에 내가이 작업을 진행했다 StackOverflow에 대한 몇 가지 정보를 발견했다.
public class DateObj
{
public ZonedDateTime Date { get; set; }
}
void Main()
{
var date = "2017-10-26 13:32:11 Etc/GMT";
var json = $"{{\"Date\": \"{date}\"}}";
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
"yyyy-MM-dd HH:mm:ss z",
DateTimeZoneProviders.Serialization
);
var settings = new JsonSerializerSettings();
settings.ConfigureForNodaTime(pattern.ZoneProvider);
var dateObj = JsonConvert.DeserializeObject<DateObj>(json, settings);
}
을하지만 The value string does not match a quoted string in the pattern. Value being parsed: '2017-10-26^ 13:32:11 Etc/GMT'. (^ indicates error position.)
말을 마지막 줄에 예외가 발생합니다 : 독서 문서 및 기타 리소스에서, 나는 이것이 작동하도록되어 생각합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
사용해야합니까'DateTimeOffset' 오히려 노다 시간 '보다 입력 OffsetDateTime' : 내가 명시 적으로 오히려
DateTimeZoneProviders.Serialization
보다, 여기DateTimeZoneProviders.Tzdb
을 사용하고 있음을 당신은 확실히 TZDB 식별자를 가지고 주어진 참고? 일반적으로 노다 시간 유형을 전적으로 고수 할 수 있다면 인생은 더 간단합니다. –아니요, 모든 유형을 사용할 수 있지만 차이가별로 없으며 다른 오류 만 표시됩니다. '값 문자열이 패턴의 인용 문자열과 일치하지 않습니다. 파싱되는 값 : '2017-10-26^13:32:11 Etc/GMT'. (^는 오류 위치를 나타냅니다.)'. ''''등이 없으며, 몇 가지 다른 유형 인 'OffsetDateTime'과'ZonedDateTime'을 사용하여 패턴의 몇 가지 변형을 시도했지만 오류는 동일하게 유지되었습니다. – TheQ
값을'ZonedDateTime'으로 만들어 준다면, 제대로 작동 할 수 있어야합니다. ('OffsetDateTime'을 제안했을 때 나는 실제로 여러분의 가치에 오프셋이 아닌 시간대가 포함되어 있음을 발견하지 못했습니다.) 현재이 질문에 대한 접근 방식은 문제가 아닙니다. 현재 답변을 삭제하거나 질문을 "NodaTime.Serialization.JsonNet에서 사용자 지정 형식으로 작업하도록 만들기"또는 그에 대한 새로운 질문을 만들기로 변경했습니다. 나는 확실히 어떤 방법으로도 돕고 싶다 ... –