2011-07-13 64 views
9

Tôi có một loạt thời gian mà tôi theo dõi cho ứng dụng của mình. Tất cả đều ở thời gian UTC. Đối với một phần của ứng dụng của tôi, tôi muốn gửi email với một trong những thời gian này, nhưng được chỉnh sửa để ở trong múi giờ cụ thể đó.C# Thời gian: Chuyển đổi cho các múi giờ khác nhau

Chỉ có hai lĩnh vực chính mà tôi sẽ đối phó với, bờ biển phía đông và Texas (Dallas và Huston)

tôi cũng có thể làm cho một datetime mới khi tôi gửi email này để có được những múi giờ miền Đông (DateTime timestamp = DateTime.Now;)

Câu hỏi của tôi là thế này:

Nếu người dùng nằm trong khu vực texas làm thế nào tôi có thể chuyển đổi thời gian của tôi từ phía đông với thời gian (1 giờ ít hơn)?

tôi đã cố gắng một cái gì đó như thế này:

  //Convert timestamp to local time 
      TimeSpan ts = TimeZone.CurrentTimeZone.GetUtcOffset(timestamp); 
      timestamp.Add(ts); 

      timestampString = timestamp.ToString(); 

Nhưng điều đó không làm việc. Tôi cũng biết rằng dòng này không hợp lệ:

timestamp.Hour = timestamp.Hour - 1; 
+1

Bạn nên tránh DateTime.Now, và thay vào đó sử dụng DateTime.UtcNow. DateTime.Now có thể làm bạn ngạc nhiên một ngày, với múi giờ sai hoặc tiết kiệm ánh sáng ban ngày sai. –

Trả lời

15

Sử dụng TimeZoneInfo Class để chuyển đổi một thời gian địa phương một thời gian trong một múi giờ khác:

TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est); 
0

Bạn có thể sử dụng javascript:

var visitortime = new Date(); 
    vat time = visitortime.getTimezoneOffset()/60; 

Sau đó bạn có thể lưu giá trị này cho bất kỳ kiểm soát ẩn đó là runat = "server".

4
var now = DateTime.Now; // Current date/time 
    var utcNow = now.ToUniversalTime(); // Converted utc time 
    var otherTimezone = TimeZoneInfo.FindSystemTimeZoneById("ANY OTHER VALID TIMEZONE"); // Get other timezone 
    var newTime = TimeZoneInfo.ConvertTimeFromUtc(utcNow, otherTimezone); // New Timezone 
3

này nên làm các trick

DateTime localTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Local); 
+0

http://msdn.microsoft.com/en-us/library/bb382770(v=vs.110).aspx – Geykel

0

tại sao không chỉ

TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "AUS Eastern Standard Time");

và kiểm tra nhận được tất cả các múi giờ sẵn

foreach (TimeZoneInfo tz in TimeZoneInfo.GetSystemTimeZones()) 
{ 
    Console.WriteLine(tz.Id); 
} 
Các vấn đề liên quan