[C#] DateTime 객체가 주어지면 ISO 8601 날짜를 문자열 형식으로 어떻게 얻습니까?

주어진:

DateTime.UtcNow

ISO 8601 호환 형식으로 동일한 값을 나타내는 문자열을 어떻게 얻 습니까?

ISO 8601은 여러 유사한 형식을 정의합니다. 내가 찾고있는 특정 형식은 다음과 같습니다.

yyyy-MM-ddTHH:mm:ssZ



답변

독자에 대한 참고 사항 : 여러 의견 제시 자들이이 답변에서 일부 문제를 지적했습니다 (특히 첫 번째 제안과 관련됨). 자세한 내용은 주석 섹션을 참조하십시오.

DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");

이렇게하면 2008-09-22T13 : 57 : 31.2311892-04 : 00 와 비슷한 날짜가 제공 됩니다. 됩니다.

다른 방법은 다음과 같습니다.

DateTime.UtcNow.ToString("o");

너에게주는 2008-09-22T14 : 01 : 54.9571247Z를줍니다

지정된 형식을 얻으려면 다음을 사용할 수 있습니다.

DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")

날짜 / 시간 형식 옵션


답변

DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)“s”형식 지정자가 정렬 가능한 날짜 / 시간 패턴으로 설명되어 있으므로 원하는 것을 제공해야합니다. ISO 8601을 준수합니다.


답변

DateTime.UtcNow.ToString("s")

2008-04-10T06 : 30 : 00과 같은 것을 반환합니다.

UtcNow분명히 UTC 시간을 반환 하므로 아무런 해를 끼치 지 않습니다.

string.Concat(DateTime.UtcNow.ToString("s"), "Z")


답변

사용하다:

private void TimeFormats()
{
    DateTime localTime = DateTime.Now;
    DateTime utcTime = DateTime.UtcNow;
    DateTimeOffset localTimeAndOffset = new DateTimeOffset(localTime, TimeZoneInfo.Local.GetUtcOffset(localTime));

    //UTC
    string strUtcTime_o = utcTime.ToString("o");
    string strUtcTime_s = utcTime.ToString("s");
    string strUtcTime_custom = utcTime.ToString("yyyy-MM-ddTHH:mm:ssK");

    //Local
    string strLocalTimeAndOffset_o = localTimeAndOffset.ToString("o");
    string strLocalTimeAndOffset_s = localTimeAndOffset.ToString("s");
    string strLocalTimeAndOffset_custom = utcTime.ToString("yyyy-MM-ddTHH:mm:ssK");

    //Output
    Response.Write("<br/>UTC<br/>");
    Response.Write("strUtcTime_o: " + strUtcTime_o + "<br/>");
    Response.Write("strUtcTime_s: " + strUtcTime_s + "<br/>");
    Response.Write("strUtcTime_custom: " + strUtcTime_custom + "<br/>");

    Response.Write("<br/>Local Time<br/>");
    Response.Write("strLocalTimeAndOffset_o: " + strLocalTimeAndOffset_o + "<br/>");
    Response.Write("strLocalTimeAndOffset_s: " + strLocalTimeAndOffset_s + "<br/>");
    Response.Write("strLocalTimeAndOffset_custom: " + strLocalTimeAndOffset_custom + "<br/>");

}

산출

UTC
    strUtcTime_o: 2012-09-17T22:02:51.4021600Z
    strUtcTime_s: 2012-09-17T22:02:51
    strUtcTime_custom: 2012-09-17T22:02:51Z

Local Time
    strLocalTimeAndOffset_o: 2012-09-17T15:02:51.4021600-07:00
    strLocalTimeAndOffset_s: 2012-09-17T15:02:51
    strLocalTimeAndOffset_custom: 2012-09-17T22:02:51Z

출처 :


답변

System.DateTime.UtcNow.ToString("o")

=>

val it : string = "2013-10-13T13:03:50.2950037Z"


답변

다음 코드로 “Z”( ISO 8601 UTC )를 얻을 수 있습니다 .

Dim tmpDate As DateTime = New DateTime(Now.Ticks, DateTimeKind.Utc)
Dim res as String = tmpDate.toString("o") '2009-06-15T13:45:30.0000000Z

이유는 다음과 같습니다.

ISO 8601의 형식은 다음과 같습니다.

DateTimeKind.Local

2009-06-15T13:45:30.0000000-07:00

DateTimeKind.Utc

2009-06-15T13:45:30.0000000Z

DateTimeKind. 지정되지 않음

2009-06-15T13:45:30.0000000

.NET은 다음과 같은 옵션이 포함 된 열거 형을 제공합니다.

'2009-06-15T13:45:30.0000000-07:00
Dim strTmp1 As String = New DateTime(Now.Ticks, DateTimeKind.Local).ToString("o")

'2009-06-15T13:45:30.0000000Z
Dim strTmp2 As String = New DateTime(Now.Ticks, DateTimeKind.Utc).ToString("o")

'2009-06-15T13:45:30.0000000
Dim strTmp3 As String = New DateTime(Now.Ticks, DateTimeKind.Unspecified).ToString("o")

참고 : Visual Studio 2008 “watch utility”를 toString ( “o”)에 적용하는 경우 부분에 적용하면 다른 결과를 얻을 수 있지만 이것이 버그인지는 모르지만이 경우 String 변수를 사용하여 더 나은 결과를 얻을 수 있습니다 디버깅하는 경우.

출처 : 표준 날짜 및 시간 형식 문자열 (MSDN)


답변

DateTime을 ISO 8601로 사용해야하는 경우 ToString ( “o”)은 원하는 것을 산출해야합니다. 예를 들어

2015-07-06T12:08:27

그러나 DateTime + TimeZone은 블로그 게시물 .NET의 DateTime 및 DateTimeOffset 블로그에 설명 된대로 다른 문제가 발생할 수 있습니다 . 모범 사례 및 일반적인 함정 :

DateTime에는 코드 버그를 제공하도록 설계된 수많은 트랩이 있습니다.

DateTimeKind.Unspecified를 사용하는 DateTime 값은 나쁜 소식입니다.

DateTime은 비교를 할 때 UTC / Local에 신경 쓰지 않습니다.

DateTime 값은 표준 형식 문자열을 인식하지 못합니다.

DateTime으로 UTC 마커가있는 문자열을 구문 분석해도 UTC 시간이 보장되지는 않습니다.