2012-10-31 34 views
8

Tôi đã tìm kiếm cách chuyển đổi từ UTC sang giờ miền núi và tôi đã tìm thấy thành công chức năng sau mà mọi người nói đều tính đến DST. Bất cứ khi nào nó chuyển đổi từ UTC sang Mountain, nó luôn luôn -7 để bù đắp (khi nó phải là -6 hiện tại). Ngoại trừ nó không có vẻ là. Bất cứ ai có thể tỏa sáng một chút về điều này cho tôi hoặc một cách để làm cho nó đưa vào tài khoản DST?Chuyển đổi từ UTC sang US Mountain time với DST

DateTime utcTime = new DateTime(createdDate.Ticks, DateTimeKind.Utc); 
DateTime mountainTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(utcTime, "US Mountain Standard Time"); 

Cảm ơn, Dman

+0

là bạn có mục tiêu cụ thể chuyển đổi UTC Mountain hoặc là nó để chuyển đổi UTC thành múi giờ của khách hàng? –

Trả lời

13

Dường như có hai vùng trong .NET (ít nhất là trên bản cài đặt Windows 8 của tôi) là thời gian trên núi.

Có "Giờ chuẩn miền núi Hoa Kỳ" mà bạn đang sử dụng và không quan sát DST (dành cho Arizona) - và "Giờ chuẩn miền núi" đơn giản không quan sát DST. Vì vậy, bạn chỉ cần để thoát khỏi những "Mỹ" phần và nó sẽ làm việc:

using System; 

class Test 
{ 
    static void Main() 
    { 
     DateTime octoberUtc = new DateTime(2012, 10, 1, 0, 0, 0, DateTimeKind.Utc); 
     DateTime decemberUtc = new DateTime(2012, 12, 1, 0, 0, 0, DateTimeKind.Utc); 
     ConvertToMountainTime(octoberUtc); 
     ConvertToMountainTime(decemberUtc); 
    } 

    static void ConvertToMountainTime(DateTime utc) 
    { 
     DateTime mountain = TimeZoneInfo.ConvertTimeBySystemTimeZoneId 
      (utc, "Mountain Standard Time"); 

     Console.WriteLine("{0} (UTC) = {1} Mountain time", utc, mountain); 
    } 
} 

Output (Anh văn):

01/10/2012 00:00:00 (UTC) = 30/09/2012 18:00:00 Mountain time 
01/12/2012 00:00:00 (UTC) = 30/11/2012 17:00:00 Mountain time 
+3

Cảm ơn rất nhiều! Mỗi khi tôi nhìn thấy một câu trả lời từ bạn Jon nó thường nổ tung! Làm việc tuyệt vời và theo kịp những đóng góp của bạn cho SO! – DMCApps

+1

Vùng "Giờ chuẩn Hoa Kỳ" là dành cho Arizona, không thực hiện tiết kiệm ban ngày. Kiểm tra thuộc tính DisplayName và bạn sẽ thấy. –

+0

@MattJohnson: Đã chỉnh sửa, cảm ơn. –

1

Giờ chuẩn miền núi vẫn là -7. Trái ngược với niềm tin phổ biến, chúng tôi không thay đổi thời gian của mình, nhưng thời gian của chúng tôi là vùng. Múi giờ hiện tại của chúng tôi thực sự là Giờ ban ngày miền núi. Tìm ra thông tin múi giờ là .... khó chịu

+1

Thật không may là nó tồi tệ hơn thế - vì ID múi giờ .NET sử dụng * là * thường là ID thời gian chuẩn, cho toàn bộ múi giờ. (Và không, bạn không thay đổi múi giờ của bạn. Một múi giờ bao gồm toàn bộ thời gian, và nó biết về các thay đổi DST.) Vì vậy, ví dụ, trong cơ sở dữ liệu múi giờ zoneinfo/tzdb chuẩn, tôi sử dụng "Châu Âu/"Múi giờ Luân Đôn" thay đổi giữa UTC và UTC + 1. –

+0

Tôi nghĩ rằng ông có nghĩa là khu vực thay đổi giữa MST và MDT (cả hai múi giờ riêng biệt), và không phải là một lập trình viên cần thay đổi giữa các múi giờ cho miền địa phương đó. – Trevor

Các vấn đề liên quan