을 만들 DateTime 에서 문자열을 적용하지 않고 시간대는 일광 절감
-
07-09-2020 - |
문제
을 만들고 싶으면 어떻게 해야 하 DateTime var 문자열에서는 이미 이에 대한 조정 UTC?나는 실행하는 이 컴퓨터에서 설정 BST(GMT+1)입니다.실행하는 경우 다음과 같은 라인의 코드:
DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00");
다음 값을 사용에 대해 테스트 데이터베이스를 들고(UTC)값이 다음 그것이 나타나는 것을 변환합니다.ToDateTime()가 실제로 나 UTC 값의 14:20.나는 그것을 원하지 않지 전환니다-나는 그것을 받아들이는 내 DateTime 문자열에서 이미 UTC.
감사합니다.
해결책
문자열을 구문 분석하고 문자열에 지정된 시간대가 없을 때 UTC 시간을 가정하도록 지정하십시오.
DateTime clientsideProfileSyncStamp =
DateTime.Parse(
"20-May-2011 15:20:00",
CultureInfo.CurrentCulture,
DateTimeStyles.AssumeUniversal
);
. 다른 팁
사용
DateTimeOffset.Parse
.
언더 광고 DateTimeOffset
유형은 지점을 나타냅니다.시간대의 차이에 관계없이 시간대에 관계없이 '타임 스탬프'가 필요로하는 Datetime보다 선호도가 사용되어야합니다.
@ guffa의 대답은 매우 좋지만 추가 답변을 추가하고 싶습니다. DateTime 문자열이 "2017-11-27T05 : 30 : 00.000z"처럼 보이면 Assumeuniversal이 작동하지 않습니다. 이것을 시도하십시오 :
DateTime.Parse("2017-11-27T05:30:00.000Z", null, System.Globalization.DateTimeStyles.AdjustToUniversal);
.
Assumeuniversal과 Adjustiversal 사이에는 약간의 차이가 있습니다. Assumeuniversal 및 Adjustuiversal 간의 차이점
추가 Z
DateTime 문자열:
DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00Z");
Console.Write(clientsideProfileSyncStamp.ToUniversalTime()); // 20-May-2011 15:20:00
예외없이 구문 분석 오류를 처리 할 수있는 TryParse
Variant를 잊지 마십시오.
DateTime clientsideProfileSyncStamp;
DateTime.TryParse(
"20-May-2011 15:20:00",
System.Globalization.CultureInfo.CurrentCulture,
System.Globalization.DateTimeStyles.AssumeUniversal,
out clientsideProfileSyncStamp
);
.
또한 ParseExact
또는 TryParseExact
를 사용하지 않는 경우 Per Kind
가 Local
이므로 ToUniversalTime()
clientsideProfileSyncStamp.ToUniversalTime();
. DateTime.Parse()
또는 DateTime.TryParse()
var clientsideProfileSyncStamp = DateTime.Parse("20-May-2011 15:20:00");
.