DateTime을 변환 하시겠습니까? 끈으로


11

DateTime?에서 문자열 로 변환하고 싶습니다 . 날짜가 null이면 return "", 그렇지 않으면 다음 과 같은 문자열 형식을 반환하십시오 "2020-03-05T07:52:59.665Z". 코드는 이와 같지만 작동하지 않습니다. 그것은 말했다 "DateTime?""ToUniversalTime"에 대한 정의를 포함하지 않습니다. 누군가이 문제를 해결하는 방법을 알고 있습니까?

DateTime? date = DateTime.UtcNow;

var dateInUTCString = date == null ? "" : date.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");

1
그건 그렇고, 당신은 원하는가 .ToString("o")?
요한 복음

아, 이미 DateTime.UTCN을 사용하고 있으므로 더 이상 ToUniversalTime ()을 사용할 필요가 없습니까? @남자. 아 .ToString("o"), 나는 더 연구 할 것이다. 감사합니다!
camahe

1
실제로 ISO8601 형식 만 원하면 "o"를 사용할 수 있습니다. 참조 워드 프로세서

@John : "o"는 틱 정밀도를 사용하므로 ISO-8601을 준수하더라도 바람직하지 않을 수 있습니다.
Jon Skeet

1
"하지만 .ToString ("o ")를 사용하면 Z가 없습니다. 여전히 ToUniversalTime ()을 호출하면됩니다. 'Z'는 UTC의 종류를 가지고 있습니다.
Jon Skeet

답변:


16

DateTime? Value 속성과 HasValue 속성이 있습니다

시험:

var dateInUTCString = date.HasValue ? date.Value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") : "";

짧은 버전을 사용할 수 있습니다.

var dateInUTCString = date?.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") ?? "";

8

ValueLeszek의 답변에 따라 속성을 직접 사용할 수는 있지만 null 병합 연산자와 함께 null 조건부 연산자를 사용합니다.

string dateInUTCString =
    date?.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture) 
    ?? "";

다음은이 ?.경우 단지 널 값 발생합니다 date널 (null), 그리고 ??의 결과 경우 운영자가 디폴트 값을 제공 할 것입니다 date?.ToUniversalTime().ToString(...)전화가 null 인 (경우 어떤 만 일어날 것 date널).

현재 스레드의 문화권에서 그레고리력을 사용하지 않을 때 예기치 않은 결과가 발생하지 않도록 고정 문화권을 지정하려고하며 형식 문자열에서 모든 리터럴을 인용 할 필요가 없습니다. 그렇게 할 때 확실히 작동 하지만 IMO를 읽는 것이 더 어렵습니다.

문자열에서 표현되는 정밀도가 마음에 들지 않으면 "O"표준 형식 문자열을 사용하여 코드를 더 간단하게 만들 수 있습니다 .

string dateInUTCString = date?.ToUniversalTime().ToString("O") ?? "";

이 시점 CultureInfo.InvariantCulture에서 항상 "O"가 사용하는 것으로 지정할 필요는 없습니다 .


1
"O"포맷 문자열로 사용하지 않습니까? docs.microsoft.com/en-us/dotnet/standard/base-types/…
Zohar Peled

1
@ZoharPeled : 틱 정밀도가 있으며 OP는 분명히 밀리 초 정밀도만을 원합니다.
Jon Skeet

실제로 저는 Z문자열 끝에 있는 형식을 원합니다
camahe

1
@ camahe : "O"형식 지정자는 이미이를 사용합니다. Zohar가 게시 한 문서 링크를 참조하십시오. 얼마나 많은 자릿수의 정밀도가 마음에 들지 않으면 "O"를 사용하는 것이 훨씬 간단합니다.이 경우 CultureInfo.InvariantCulture를 지정할 필요가 없습니다. 옵션으로 추가하기 위해 답변을 수정합니다.
Jon Skeet

2
@camahe : 당신이 질문을 할 때, 그것이 될하는 데 도움이 이쪽으로부터 교훈을 주시기 바랍니다 정말 귀하의 요구 사항에 정확한.
Jon Skeet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.