2010-03-04 11 views

답변

1

부부 문제 :

1) 원래 문자열이 -04의 오프셋 시간대 포함 통지해야합니다 : 00, 그래서 UTC 형식이 아니다. 같은 시점의 UTC 버전은 분명히 2010-03-15T04 : 00 : 00Z입니다 (Z의 끝은 UTC/줄루를 의미 함). 그런 다음 DateTime을 표시하면 로컬 시간대 버전이 EST (-5)이므로 원래 문자열 (오프셋 -4)에 표시되기 전에 1 시간이 표시되므로 11 : 00pm

2) 여기에서 목표로 한 것은 로컬 타임 존이나 UTC 버전의 타임 스탬프를 표시하는 것이 아니라 입력 문자열이 지정한 것과 동일한 오프셋으로 유지하는 것입니다. 다행히 3.5 그냥 이런 종류의 시나리오에 대한 유형을 추가 : DateTimeOffset으로 대신 날짜 시간의을 DateTimeOffset을 사용한다면

, 디폴트의 toString 출력은 다음과 같습니다

[342] C:\ » $dto = [datetimeoffset]::parse('2010-03-15T00:00:00-08:00') 
[343] C:\ » $dto.ToString() 
3/15/2010 12:00:00 AM -08:00 
[344] C:\ » $dto.DateTime.ToString() 
3/15/2010 12:00:00 AM 

오프셋의 동일한 시간과 지식 (따라서 형식 이름)을 유지합니다. 오프셋에 대해 신경 쓰지 않고 입력이 있던 오프셋에 대해 DateTime을 가져 오려는 경우 위의 그림과 같이 DateTime 속성을 가져올 수 있습니다. DateTime을 고수해야하며 DateTimeOffset으로 전환 할 수 없거나 전환하지 않으려면이 방법이 좋습니다.

3

표시 한 날짜는 UTC이고 변환을 수행하면 현지 시간대의 DateTime 인스턴스가 조정됩니다.

ToUniversalTime method으로 전화하면 UTC 형식으로 날짜를 가져올 수 있습니다.

현지 시간대의 리터럴로 입력 한 시간이 필요하면 날짜 데이터 (년, 월, 일 등)를 사용하거나 일련의 호출을 통해 새 DateTime 인스턴스를 만들어야합니다. SpecifyKind method은 DateTime 인스턴스가 현지 시간대 또는 UTC인지 여부를 나타냅니다.

+0

시간대 문제 일 경우 시간이 없어야합니다. 08:00:00 PM – Randolpho

+0

아, 훌륭합니다. 나는 그다지 의심 스럽지만, 나에게 그것을 요구하지 않고 회심을하고 있다는 것을 나에게 들었다. –

+0

@Randolpho : 8:00 PM은 현지 시간이 UTC보다 4 시간 늦었다 고 가정합니다. 이 경우 현지 시간은 동유럽 어딘가의 UTC + 3 인 것으로 보입니다. –

0

시간대 문제입니다. .NET 3.5를 사용하는 경우 TimeZoneInfo 클래스를 사용하면 시간대 작업에 도움이 될 수 있습니다. 이전 버전의 .NET에서는 강력하지 않은 TimeZone을 사용해야합니다. 여기