현재 시간을 웹 서비스에 보내는 WP8 앱이 있습니다.
전화로 날짜 시간 문자열을 얻습니다.
DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff")
대부분의 사용자에게는 훌륭하게 작동하며 다음과 같은 올바른 문자열을 제공합니다 "09/10/2013 04:04:31.415"
. 그러나 일부 사용자에게는 결과 문자열이와 같 "09/14/2013 07.20.31.371"
으며 웹 서비스에 문제가 발생합니다.
문화 형식에 문제가 있습니까? 결과 문자열이 점 대신 콜론으로 구분되도록하려면 어떻게해야합니까?
답변
문화 형식에 문제가 있습니까?
예. 사용자는 시간 구분 기호가 도트 인 문화권에 있어야합니다. “:”및 “/”는 모두 사용자 정의 날짜 및 시간 형식 으로 문화권에 따라 해석 됩니다 .
결과 문자열이 점 대신 콜론으로 구분되도록하려면 어떻게해야합니까?
다음을 지정하는 것이 좋습니다 CultureInfo.InvariantCulture
.
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
또는 시간 및 날짜 구분 기호를 인용 할 수도 있습니다.
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
…하지만 기본 캘린더 시스템이 Gregorian 캘린더가 아닌 문화권에서 사용자를 실행하는 경우 예상치 못한 “흥미로운”결과를 얻을 수 있습니다. 예를 들어 다음 코드를 사용하십시오.
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
DateTime now = DateTime.Now;
CultureInfo culture = new CultureInfo("ar-SA"); // Saudi Arabia
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(now.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
}
}
다음과 같은 결과 (2013 년 9 월 18 일)를 생성합니다.
11/12/1434 15:04:31.750
내 생각 엔 귀하의 웹 서비스가 놀랍습니다!
실제로 불변 문화를 사용하는 것뿐만 아니라 ISO-8601 날짜 형식으로 변경하는 것이 좋습니다 .
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
이것은 전 세계적으로 허용되는 형식입니다. 정렬 가능하며 월과 일 순서가 분명합니다. (2013 년 6 월 7 일 또는 7 월 6 일은 독자의 문화에 따라 해석 될 수 있습니다.)
답변
:
특별한 의미가 있습니다 . 시간 구분 기호입니다. ( 사용자 정의 날짜 및 시간 형식 문자열 ).
\
그것을 피하기 위해 사용 :
DateTime.ToString(@"MM/dd/yyyy HH\:mm\:ss.fff")
또는 사용 CultureInfo.InvariantCulture
:
DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff", CultureInfo.InvariantCulture)
두 번째 것과 함께하는 것이 좋습니다. /
특별한 의미가 있기 때문에 ( 날짜 구분 기호입니다. ) 따라서 문제가 발생할 수 있습니다.
답변
사용자는 콜론 대신 점을 사용하는 문화권에 있어야하므로 InvariantCulture를 사용할 수 있습니다.
DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff", CultureInfo.InvariantCulture);
답변
나는 최근에 다른 방향 에서 Windows 10 으로이 문제에 부딪 쳤고 @JonSkeet의 대답이 내 문제를 해결하는 데 매우 도움이된다는 것을 알았습니다.
또한 테스트 양식을 사용하여 추가 조사를 한 결과 현재 문화권이 런타임 ( ) 으로 설정 "no"
되거나 "nb-NO"
런타임 ( Thread.CurrentThread.CurrentCulture = new CultureInfo("no");
) 으로 설정되면 Windows 7에서 ToString ( “yyyy-MM-dd HH : mm : ss”) 호출이 다르게 응답합니다. Windows 10. Windows 7에서 예상 한 것과 Windows 10에서 HH.mm.ss를 반환했습니다!
나는 이것이 약간 무섭다고 생각한다! 문화는 모든 Windows 버전의 문화라고 생각했기 때문에.
답변
String.Format을 사용할 수 있습니다.
DateTime d = DateTime.Now;
string str = String.Format("{0:00}/{1:00}/{2:0000} {3:00}:{4:00}:{5:00}.{6:000}", d.Month, d.Day, d.Year, d.Hour, d.Minute, d.Second, d.Millisecond);
// I got this result: "02/23/2015 16:42:38.234"
답변
날짜를 문자열로 변환
네임 스페이스 사용
using System.Globalization;
암호
string date = DateTime.ParseExact(datetext.Text, "dd-MM-yyyy", CultureInfo.InstalledUICulture).ToString("yyyy-MM-dd");