1. 표준 포맷 문자열 사용
C#은 ISO 8601과 호환되는 표준 포맷 지정자를 제공합니다:
| 포멧 지정자 | 예시 출력 | 설명 |
|---|---|---|
| "o" | 2026-03-11T10:44:30.0000000+09:00 | 가장 완전한 ISO 8601 표현. 시간대 오프셋 포함 |
| "s" | 2026-03-11T10:44:30 | ISO 8601 기본 형식. 시간대 정보 없음 |
| "u" | 2026-03-11 01:44:30Z | UTC 기준 ISO 8601 표현 |
2. 직접 커스텀 포맷 지정
원하는 형태로 직접 지정할 수도 있습니다:
C#
DateTime now = DateTime.UtcNow;
string iso8601 = now.ToString("yyyy-MM-ddTHH:mm:ssZ");
Console.WriteLine(iso8601);
// 출력: 2026-03-11T01:44:30Z- Z는 UTC를 의미합니다.
- 로컬 시간대까지 포함하려면 DateTimeOffset을 쓰는 것이 안전합니다:
C#
DateTimeOffset now = DateTimeOffset.Now;
string iso8601 = now.ToString("o");
// 출력: 2026-03-11T10:44:30.1234567+09:00⚠️ 주의할 점
- DateTime vs DateTimeOffset: DateTime은 시간대 정보가 없을 수 있으므로, 국제 표준 교환 시에는 DateTimeOffset을 권장합니다.
- UTC 변환 필요 여부: 글로벌 API 통신 시에는 DateTime.UtcNow를 사용해 "Z"(Zulu/UTC) 표기를 붙이는 것이 일반적입니다.
- 밀리초/틱 포함 여부: "o" 포맷은 소수점 이하 초 단위까지 포함하므로, 단순히 "s" 포맷보다 더 정밀합니다.
👉 정리하면, **간단히 ISO8601 스타일을 쓰려면 date.ToString("o")**를 쓰는 것이 가장 안전하고 범용적입니다.
혹시 특정 API에서 "yyyy-MM-ddTHH:mm:ssZ" 같은 UTC-only 형식을 요구한다면 DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")를 쓰면 됩니다.