2013-06-04 4 views
5

업데이트 이것은 Windows 7의 버그 일 것 같습니다. Windows 8과 동일한 시나리오를 테스트했는데이 파일을 복제 할 수 없습니다. 자세한 내용은이 문제에 게시 된 MS Bug Report을 참조하십시오. 도와 주신 모든 분들께 다시 한번 감사드립니다.C 날카로운 날짜 시간 형식

UPDATE 오류가 서버 2008 R2뿐만 아니라에서 발생 2 나는 형식을 제어 할 수 있어요 다음 페이지 Date Formats에 예제를 사용

원본 제출

(의 종류 기대하는) 내 데이트 중. 그러나 내 고객 중 한 명이 Windows 7을 사용하여 'ddd MM/dd/yy'와 같은 짧은 날짜를 표시하도록 달력을 수정했습니다. 설정에 대한 이미지를 참조하십시오. Short Date Format.

그러면 enter image description here과 같은 시계가 표시됩니다.

컴퓨터에서 날짜를 사용하는 경우를 제외하고는 정상적으로 작동합니다. 내가 캘린더 설정에 요일을 표시하고 난 다음을 참조 동일한 형식 옵션을 사용하는 DDD를 가지고가는 경우에 나는 ... 다음과 같은 날짜 ...

String.Format("{0:MM/dd/yy}", dt); //the result is 06 04 13, notice the spaces 

를 포맷 할 경우

String.Format("{0:MM/dd/yy}", dt); //the result is 06/04/13, this time it has forward slashes 

날짜에 .ToShortDateString() 옵션을 사용하면 "Tue 06/04/13"이 표시되고 데이터베이스로 이동할 때 충돌이 발생합니다. 이것이 문제의 발견 방법입니다.

형식을 하드 코딩하지 않는 것, 즉 월을 슬래시로 하루에 연결하는 것 외에 다른 사람이 내가이 일을하도록 시도 할 수있는 다른 방법을 알고 있습니까?

+4

일부 SQL을 통해 날짜를 보내려면 날짜를 문자열로 포맷하는 것처럼 들립니다. 문자열 형식 대신이 명령 매개 변수를 사용하는 것을 고려 했습니까? –

+0

+1 마이클의 코멘트. 텍스트 표현이 최종 목표가 아니라면 문자열 변환을 피해야합니다. –

+0

네, 꽤 오래된 앱입니다. 방금 전달 된 SQL 문자열이 있습니다. 명령 매개 변수로 변환하지 않고 EF로 변환 할 수있을 때까지 기다리는 것이 좋습니다. 그것은 아주 좋은 생각처럼 들립니다. 나는 그것을 시도 할 것이다. – JabberwockyDecompiler

답변

3

그것은 소리. 문자열 형식 대신이 명령 매개 변수를 사용하는 것을 고려 했습니까?

2

편집 됨 메모 : 이것은 Windows 7의 버그 일 것입니다. OP 패널의 "추가 설정"탭을 사용하여 제어판을 통해 간단한 날짜 패턴을 변경하면 CurrentCulture와 CurrentUICulture의 날짜 구분 기호도 변경됩니다.

짧은 날짜 형식을 수정하면 첫 번째 형식이 아닌 문자가 현재 문화권의 날짜 구분 기호로 선택 된 것처럼 보입니다. CurrentCulture와 CUrrentUiCulture는 [의도하지 않은] 사용자 정의를 반영하도록 수정됩니다. 어떤 [밝은] 개발자처럼 아무도 요일 같은 것을 포함하는 짧은 날짜 형식을 사용하지 않는다는 [부당한] 가정을 한 것처럼 보입니다.

멋진 캐치! Microsoft에 버그를보고 할 예정입니까?

불변의 문화권을 사용하여 날짜 등을 형식화하는 경우 사용자 설정이 영향을 미치지 않습니다. 사용자가 지정한 문화는 Windows OS에 설정된 현재의 문화를 일치하는 경우

CultureInfo usa = CultureInfo.GetCultureINfo("en-US") ; 
string.Format(usa , "{0:MM/dd/yy}" , dt) ; 

그러나, 사용자 지정이 적용됩니다 : 당신이 원하는 문화의 인스턴스를

String.Format(CultureInfo.InvariantCulture , "{0:MM/dd/yy}", dt); 

뭔가를 시도하거나 사용하는 의미를 현재 Windows 문화권이 아닌 문화권을 사용하지 않으면 동일한 문제가 발생합니다.MDSN에서

자세한 내용 :

특정 문화를 지정하지 않고, 당신은 얻을 것이다 현재 사용자의 CurrentCulture 또는 CurrentUICulture 모든 사용자 -와 지정된 개조자는 그것에 적용된다.

+0

의견을 보내 주셔서 감사합니다. 불행히도 문화 형식으로 문제가 해결되지 않았습니다. 나는 그것도 해결책이 될 것이라고 기대했지만 ddd 이후의 설정 공간이 분리기를 공간 (유럽에서 사용하는 것과 같은 종류의 분리 기호)으로 차고 있다고 생각합니다. 형식이 올바르지 만 공간은 여전히 ​​나타납니다. – JabberwockyDecompiler

+0

@ Gouber80. 흥미 롭 군. 나는 이것을 윈도우 7의 버그라고 불러야 할 것이다. 제 수정 된 답변을보십시오. InvariantCulture (방금 확인한)를 사용하면 문제가 발생하지 않습니다. –

+0

나는 그것이 CurrentCulture로 수정 되었어야한다는 것에 동의 할 것입니다. 충돌로부터의 응답을 볼 때 InvariantCulture와 함께 나타나지 않는 것을 발견했습니다. 나는 이것을 Win 7 포럼에 넣을 것이라고 생각한다. 내가 뭔가 잠재적 인 창문 문제가 될 수 있다는 것을 알게 된 지 오래다.). – JabberwockyDecompiler

2

InvariantCulture를 사용해야 작동합니다. 확인을 위해 테스트 콘솔 앱을 만들었습니다. 이 코드는 스레드의 현재 문화가 불가 한 것으로 변경 : 당신이 어떤 SQL을 통해 그것을에서 보내기 위해 문자열로 날짜를 포맷하는 것처럼

class Program 
{ 
    static void Main(string[] args) 
    { 
      /// Displays '06 04 13' 

     Console.WriteLine(string.Format("{0:MM/dd/yy}", System.DateTime.Now)); 

     System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; 

      /// Displays '06/04/13' 

     Console.WriteLine(string.Format("{0:MM/dd/yy}", System.DateTime.Now)); 

     Console.ReadLine(); 
    } 
} 
+0

나는 이것에 대한 테스트를했고 작동한다. 마이클의 의견은 대답으로 게시하면 기다리는 것이 더 적절한 해결책이되어 버린 이후로 내가 요구 한 것에 답변했기 때문에 나는 그것을 반대했다. 나는 내일까지 그를 줄 것이다. 그러면 나는 당신의 대답을 답으로 표시 할 것입니다. – JabberwockyDecompiler

+0

자세히보기, 이것은 Microsoft 버그와 완전히 유사합니다. Windows의 간단한 날짜 형식이 'ddd MM/dd/yy'로 설정된 경우에도 날짜는 슬래시로 표시되어야합니다. Windows 작업 표시 줄에서 잘 보이기 때문에 Windows 설정을 'ddd MM/dd/yyyyy'로 변경했습니다. 그러나 Outlook에서 슬래시가없는 날짜 (사용자와 동일한 문제)가 표시되었음을 확인했습니다. Microsoft에보고해야 할 수도 있습니다. – crash

+0

예, 다른 사람들도 그렇게 언급했습니다. 내 대답의 링크를 참조하십시오, 나는 당신이 다음에 관심이 있다면 MS 포럼에 게시했습니다. – JabberwockyDecompiler