C#에서 "d" 형식 지정자는 짧은 날짜(short date) 패턴을 나타내는 표준 날짜 및 시간 형식 문자열입니다. 이 형식은 내부적으로 사용자 지정 형식 문자열로 변환되어 적용되며, 그 기본 패턴은 다음과 같습니다.
MM/dd/yyyy
여기서 중요한 점은 "d" 형식 지정자가 고정된 패턴을 사용하는 것이 아니라, 해당 문화권(culture)의 DateTimeFormatInfo.ShortDatePattern 속성 값에 따라 결정된다는 것입니다. 즉, 같은 코드라도 실행 환경의 문화권 설정에 따라 출력되는 날짜 형식이 달라질 수 있습니다.
예제
아래 예제에서는 동일한 날짜(2018년 9월 9일)를 두 가지 다른 문화권 정보로 출력합니다. 하나는 DateTimeFormatInfo.InvariantInfo(문화권에 영향을 받지 않는 고정 형식), 다른 하나는 미국 영어(en-US) 문화권입니다.
using System;
using System.Globalization;
class Demo {
static void Main() {
DateTime myDate = new DateTime(2018, 9, 09);
Console.WriteLine(myDate.ToString("d", DateTimeFormatInfo.InvariantInfo));
Console.WriteLine(myDate.ToString("d", CultureInfo.CreateSpecificCulture("en-US")));
}
}실행 결과
09/09/2018 9/9/2018
결과 분석
InvariantInfo를 사용한 첫 번째 출력은 항상 두 자리 월과 일을 유지하는 MM/dd/yyyy 패턴을 따르므로 09/09/2018이 출력됩니다. 반면 en-US 문화권의 ShortDatePattern은 M/d/yyyy로 정의되어 있어 앞자리 0이 생략된 9/9/2018이 출력됩니다.
따라서 국제화(i18n)를 고려하는 애플리케이션에서는 문화권별 날짜 형식 차이를 항상 염두에 두고, 일관된 형식이 필요하다면 InvariantInfo나 명시적인 사용자 지정 형식 문자열을 사용하는 것이 좋습니다.