2011-07-08 16 views
10

Một vấn đề khác của ParseExact. Tôi đang cố gắng để phân tích một định dạng UTC chuỗi để một datetime với định dạng của:Tại sao DateTime.ParseExact không phân tích cú pháp định dạng UTC với dấu {?

"YYYY-MM-DDThh:mm:ss.ssZ"

mà là ở định dạng UTC, với Z. dấu tôi không thể phân tích chính xác nó đối với một số lý do. Tôi đã thử "u", "s", "o" chuỗi định dạng tùy chỉnh, cũng như một số DateTimeStyles và cũng như viết tay. Văn hóa là bất biến.

Vì lý do nào đó, nó không giống như Z, cho biết đó là chuỗi UTC. Khi tôi xóa nó, phân tích cú pháp. Tôi sẽ hạnh phúc, với một số sự hài lòng, thoát khỏi Z dấu như tôi biết họ là chuỗi giờ UTC, nhưng tôi không thể. Bất kỳ ý tưởng?

Trả lời

18

Chuỗi định dạng mà bạn đã đề cập là standard format strings. Có lẽ bạn nên sử dụng một custom format string, như thế này:

DateTime.ParseExact("2011-03-02T20:15:19.64Z", "yyyy-MM-ddTHH:mm:ss.ffK", null).ToUniversalTime() 

Nếu bạn không đặt ToUniversalTime() lúc kết thúc, kết quả sẽ được chuyển đổi sang múi giờ địa phương của bạn.

+0

Tôi nghĩ Z có nghĩa là nó đã ở định dạng UTC? –

+1

@scope, vâng, có. Nhưng kết quả của 'ParseExact()' ở trên là '2.3.2011 21: 15: 19' đối với tôi (UTC + 1), với' DateTimeKind.Local'. Để có được thời gian UTC, bạn phải gọi 'ToUniversalTime()'. – svick

+0

Điều đó có hiệu quả. Cảm ơn @Svick. –