날짜 형식 yyyy-MM-ddTHH : mm : ssZ


102

나는 이것이 아주 간단을해야하지만, 가정을 가져올 수 없습니다 :(.이 형식에서 Z 시간대입니다.
T는 오랜 시간 패턴입니다
내가 사용 제외하고이 형식의 날짜를 얻을 수있는 방법

DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:ssZ"));

C #에서


나는이 질문이 9 년 동안 존재했지만 수락 된 대답은 UtcNow.ToString(s)+Z잘못된 것임을 알고 있습니다. ISO8601은 RoundTrip 옵션에서 지원됩니다 ToString("O"). 또한 수락 된 답변은 일광 절약 시간대를 포함 할 수있는 실제 datetime 값을 사용하는 것보다 항상 시간대 Z를 제공하는 datetime의 UTC 값을 사용한다는 점을 지적합니다. 수락 된 답변을 변경 하시겠습니까?
Richardissimo

답변:


144

UTC 사용

ISO 8601 ( MSDN 날짜 시간 형식 )

Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");

2009-11-13T10 : 39 : 35Z

Z는 이 때문이다

시간이 UTC 인 경우 공백없이 시간 바로 뒤에 'Z'를 추가합니다. 'Z'는 제로 UTC 오프셋에 대한 영역 지정자입니다. 따라서 "09:30 UTC"는 "09 : 30Z"또는 "0930Z"로 표시됩니다. "14:45:15 UTC"는 "14 : 45 : 15Z"또는 "144515Z"입니다.

오프셋을 포함하려는 경우

int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours;
string offset = string.Format("{0}{1}",((hours >0)? "+" :""),hours.ToString("00"));
string isoformat = DateTime.Now.ToString("s") + offset;
Console.WriteLine(isoformat);

주의해야 할 두 가지 : + 또는-는 시간 후에 필요하지만 분명히 +는 양수에 표시되지 않습니다. 위키 백과에 따르면 오프셋은 + hh 형식 또는 + hh : mm 일 수 있습니다. 나는 단지 몇 시간을 지켰다.

내가 아는 한, RFC1123 (HTTP 날짜, "u"포맷터)은 시간대 오프셋을 제공하기위한 것이 아닙니다. 모든 시간은 GMT / UTC입니다.


멋있는. 출력에 TZ 오프셋이 포함되어 있지 않습니까?
Neil Barnwell

나는 그것을 추가했다-문서는 's'형식이 ISO8601을 기반 으로한다고 말한다. 나는 그것이 시간대를 포함하지 않는다고 생각한다.
Chris S

물론 UTC에는 시간대가 없습니다. 도. 그는 출력에서 ​​시간대 정보를 요청하고 있습니다. 아마도 DateTimeOffset이 그가 찾고있는 것일까 요?
Neil Barnwell

5
Z를 수동으로 추가하는 것은 좋지 않습니다. .ToString ( "o")을 사용해야 적절한 출력을 얻을 수 있습니다. 밀리 초가 문제인 경우 반올림해야합니다. Z를 수동으로 추가하면 실제로 UTC가 아닌 현지 시간에 추가하면 잘못된 결과를 얻을 수 있습니다.
Tuukka Lindroos 2015 년

67
Console.WriteLine(DateTime.UtcNow.ToString("o"));  
Console.WriteLine(DateTime.Now.ToString("o"));

출력 :

2012-07-09T19:22:09.1440844Z  
2012-07-09T12:22:09.1440844-07:00

Console.WriteLine (DateTime.Now.ToString ( "o"));을 사용했습니다. 감사합니다
Ziggler

5
허용되는 대답은 형식 지정자 "s"를 사용하고 UTC 날짜의 끝에 Z를 추가하라는 것입니다. 밀리 초가 필요하지 않으면 괜찮습니다.하지만 밀리 초를 원한다면이 답변이 보여주는 것처럼 "o"를 사용해야합니다. "o"를 사용하면 기본적으로 밀리 초가 표시되고 UTC 날짜의 끝에 Z가 이미 추가됩니다.
Jim

1
DateTime.Now.ToString ( "o") 오른쪽 오프셋을 반환하므로 모든 종류의 문제를 해결합니다.
Mo Zaatar 2017

12

"o"형식은 DateTime 대 DateTimeOffset에서 다릅니다.

DateTime.UtcNow.ToString("o") -> "2016-03-09T03:30:25.1263499Z"

DateTimeOffset.UtcNow.ToString("o") -> "2016-03-09T03:30:46.7775027+00:00"

내 마지막 대답은

DateTimeOffset.UtcDateTime.ToString("o")   //for DateTimeOffset type
DateTime.UtcNow.ToString("o")              //for DateTime type

7

C # 6+에서는 문자열 보간을 사용하여 더 간결하게 만들 수 있습니다.

$"{DateTime.UtcNow:s}Z"

당신은 내 많은 시간을 절약했습니다. 간단하고 달콤한 솔루션.
Raju Paladiya

6

여기 "U"와 "의"패턴을. 첫 번째는 'T'구분 기호가없고 두 번째는 시간대 접미사가 없습니다.



5

한 가지 옵션은 "o" 형식을 사용하여 문자열로 변환하기 전에 DateTime을 ToUniversalTime () 으로 변환하는 것 입니다. 예를 들면

var dt = DateTime.Now.ToUniversalTime();
Console.WriteLine(dt.ToString("o"));

다음과 같이 출력됩니다.

2016-01-31T20:16:01.9092348Z

2

Salesforce REST API 쿼리 datetime 형식과 잘 작동합니다.

DateTime now = DateTime.UtcNow;
string startDate = now.AddDays(-5).ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");   
string endDate = now.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");  
//REST service Query 
string salesforceUrl= https://csxx.salesforce.com//services/data/v33.0/sobjects/Account/updated/?start=" + startDate + "&end=" + endDate;

// https://csxx.salesforce.com/services/data/v33.0/sobjects/Account/updated/?start=2015-03-10T15:15:57Z&end=2015-03-15T15:15:57Z

문제없이 Salesforce에서 결과를 반환합니다.


-6

분할 할 수 있으며 더 많은 코드가 필요하지만 원하는 방식으로 작동합니다.

DateTime year = DateTime.Now.Year;
DateTime month = DateTime.Now.Month;
DateTime day = DateTime.Now.Day;

요법.

드디어:

Console.WriteLine(year+month+day+etc.);

이것은 그것을 처리하는 매우 대담한 방법입니다 ...


이 대답은 원하는 출력과 같은 것을 생성하지 않습니다
cja

이 didnot는 질문 ... 또는 내가 원하는 것을 제공 -1
Ziggler
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.