http://www.cnblogs.com/longsan/archive/2006/04/05/367462.html
오늘 한 네티즌이 Q 그룹에 다음 코드를 게시했습니다.
strings=Calendar1.TodaysDate.ToString("d");
"MM/dd/yyyy"를 표시하고 싶지만 항상 "04-01-2006"이 표시되는데 이는 내가 원하는 것이 아닙니다. "2006년 4월 1일".
저도 처음에는 "MM/dd/yyyy"(사용자 정의 형식 문자열) 또는 "d"
(표준 형식 문자열)를 사용할 수 있다고 당연하게 여겼지만, 실험을 해본 결과 항상 "04-01-2006"을 표시합니다. 나중에 도움말을 확인하고 이 문제에 대해 다음과 같은 이해를 얻었습니다.
1. 표준 형식 문자열의 표시는 프로그램이 실행되는 머신의 로컬 영역, 즉 CultrueInfo와 관련이 있습니다. . 예를 들어, 컴퓨터의 로컬 지역 설정에서 설정된 날짜 사이의 구분 기호는 "-"이며, 로컬 지역 설정을 수정하지 않는 한 위 코드를 통해 표시되는 내용은 항상 "-"입니다.
2. 위 코드의 기본 표시 모드는 미국 영어에서는 "04/01/2006", 중국어에서는 "04-01-2006", 독일어에서는 "04.01.2006"입니다.
3. 로컬 영역 설정을 수정하지 않고 "04/01/2006"을 표시하려면 사용자 정의 형식 문자열을 사용해야 합니다.
strings=Calendar1.TodaysDate.ToString("MM'/'dd'/'yyyy");
동봉된 두 개의 작은따옴표는 임의의 문자열이며, 표시되면 직접 표시됩니다.
여러 가지 해결책:
첫 번째는 위의 3에서 언급한 바와 같습니다.
두 번째 유형
Web.Config에서 다음을 추가합니다.
이것이 가장 편리하지만 시도해보지 않았습니다.
세 번째 유형
제어판->지역 옵션->사용자 지정( 시간 오른쪽 버튼)
예, 하지만 휴대가 불가능합니다.
참고사항:
날짜 형식 표시
SQL에서 DateTime은 8자리 날짜입니다. 지정된 형식은 2003-12-31 00:00:00
ASP.NET에서 가장 일반적으로 사용되는 형식은 2003-입니다. 12- 31일의 일부일 뿐입니다.
DateTime.Now.ToString("d") 또는 DateTime.Now.ToShortDateString();
을 사용할 수 있지만 특정 형식이 2003/12/인지 여부에 따라 다릅니다. 31 또는 2003-12-31. 시스템 구성 날짜 구성은 무엇입니까?
2003-12-31 사양을 확인하려면 .Tostring() 사용자 정의 형식을 사용하세요.
문자 형식으로 보면 위에서 언급한 문서를 볼 수 있습니다.
예를 들어 .ToString("yyyy-MM-dd") 는 2003-11-25를 반환합니다.
.ToString("yyyyMMdd")는 20031125를 반환합니다
d 앞에 0이 없는 숫자로 날짜를 표시합니다(예: 1). 사용자 정의 숫자 형식에 이 문자만 있는 경우
%d를 사용하세요.
dd는 앞에 0이 붙은 숫자(예: 01)로 날짜를 표시합니다.
ddd 날짜를 약식 형식(예: Sun)으로 표시합니다.
dddd 요일을 전체 이름으로 표시합니다(예: 일요일).
M 앞에 0이 없는 숫자로 월을 표시합니다(예: 1월은 1로 표시됨). 사용자 정의 숫자 형식에서 이것이 유일한
문자인 경우 %M을 사용하세요.
MM은 월을 앞에 0이 붙은 숫자로 표시합니다(예: 01/12/01).
MMM은 월을 약어로 표시합니다(예: Jan).
MMMM 월을 전체 월 이름으로 표시합니다(예: 1월).
gg 연대/에포크 문자열(예: A.D.)을 표시합니다.
h 12시간제를 사용하여 앞에 0이 없는 숫자로 시간을 표시합니다(예: 오후 1:15:15). 이것이 사용자 정의 숫자 형식의 유일한 문자인 경우 %h를 사용하십시오.
hh 12시간제를 사용하여 앞에 0이 붙은 숫자로 시간을 표시합니다(예: 오후 01:15:15).
H 24시간제를 사용하여 앞에 0이 없는 숫자로 시간을 표시합니다(예: 1:15:15). 사용자 정의 숫자
형식에서 이것이 유일한 문자인 경우 %H를 사용하세요.
HH는 24시간제를 사용하여 앞에 0이 붙은 숫자(예: 01:15:15)로 시간을 표시합니다.
m 앞에 0이 없는 숫자로 분을 표시합니다(예: 12:1:15). 사용자 정의 숫자 형식에서
문자가 이 문자뿐인 경우 %m을 사용하세요.
mm 앞에 0이 붙은 숫자로 분을 표시합니다(예: 12:01:15).
s는 초를 앞에 0이 없는 숫자로 표시합니다(예: 12:15:5). 사용자 정의 숫자 형식에서
문자가 유일한 경우 %s를 사용하세요.
ss는 앞에 0이 붙은 숫자로 초를 표시합니다(예: 12:15:05).
F는 초의 소수 부분을 표시합니다. 예를 들어, ff는 100분의 1초 단위로 표시되고, ffff는 10,000초 단위로 표시됩니다.
사용자 정의 형식에는 최대 7개의 f 기호를 사용할 수 있습니다. 사용자 정의 숫자 형식에서 이것이 유일한 문자인 경우 %f를 사용하십시오.
T는 12시간제를 사용하며 정오 이전 시간에는 대문자 A를 표시하고 정오부터 오후 11시 59분까지의 시간에는 대문자 P를 표시합니다.
사용자 정의 숫자 형식에서 이것이 유일한 문자인 경우 %t를 사용하십시오.
tt는 12시간제를 사용하고 정오 이전의 모든 시간에 대해 대문자 AM을 표시합니다.
정오부터 오후 11시 59분 사이의 모든 시간에 대해서는 대문자 PM을 표시합니다.
y 연도(0-9)를 앞에 0이 없는 숫자로 표시합니다. 사용자 정의 숫자 형식에 이것이 유일한 문자인 경우
%y를 사용하세요.
yy 해당하는 경우 앞에 0을 붙인 두 자리 형식으로 연도를 표시합니다.
yyy는 연도를 4자리 형식으로 표시합니다.
yyyy는 연도를 4자리 형식으로 표시합니다.
z는 앞에 0을 붙이지 않고 시간대 오프셋을 표시합니다(예: -8). 사용자 정의 숫자 형식에 이 문자만 있는 경우
%z를 사용하세요.
zz 앞에 0을 사용하여 시간대 오프셋을 표시합니다(예: -08)
zzz 전체 시간대 오프셋을 표시합니다(예: -08:00)
시간 형식에도 동일하게 수행할 수 있습니다. 사용자 정의 형식을 사용하여 원하는 형식으로 출력할 수 있습니다.
위 표의 문자를 순서에 관계없이 임의의 조합으로 사용할 수 있습니다. 예를 들어 yyyy-yyyy라고 쓰면 가능합니다.
참고: 형식은 DateTime 형식이어야 합니다. SQL의 형식은 동일해야 합니다. 그렇지 않으면 형식이 잘못되거나 잘못됩니다. 특히 DataGrid 형식에서는 {0:IFromat},
2) 날짜 입력
날짜 형식을 입력할 때 일반적으로 DateTime.Pares()
를 사용합니다. 그러나 이 형식의 변환은 상당히 제한적이며 일부 C#에서는 사용자가 작성한 날짜를 인식하지 못합니다. 20031231과 같습니다. 2003-
12-31이라는 것은 누구나 알고 있습니다. C#에서는 이를 인식할 수 없습니다.
//언어 국가 설정
System.IFormatProvider format= new System .Globalization.CultureInfo("zh-CN",true);
//변환 형식 지정
Response.Write(DateTime.ParseExact(this.TextBox1.Text,"yyyyMMdd",format));
이렇게 하면 20031231번의 날짜 형식을 볼 수 있습니다
그런데 yyyyMMdd 형식만 변환할 수 있고 다른 형식은 변환할 수 없다는 점이 아쉽습니다.
그러나 .NET은 또 다른 오버로드를 제공합니다.
public static DateTime ParseExact(string, string[], IFormatProvider, DateTimeStyles);
지정된 여러 날짜 형식을 변환할 수 있습니다.