Thật không may, bất kỳ khái niệm về múi giờ "hiện tại" được gắn với các thiết lập hệ điều hành của máy mà mã đang chạy. Có một số Win32 apis để thay đổi múi giờ, nhưng tôi không khuyên bạn nên sử dụng chúng. Không chỉ chúng không "an toàn chỉ", nhưng chúng cũng không phải là "quá trình an toàn". Cài đặt múi giờ ảnh hưởng đến mọi thứ đang chạy trên máy.
Điều đó nói rằng, tôi muốn tò mò về trường hợp sử dụng của bạn thực sự là gì. Nếu bạn đang ở vị trí để đặt múi giờ cho mỗi luồng, thì có thể bạn đang ở vị trí không phụ thuộc vào cài đặt cục bộ. Bạn có thể sử dụng các phương pháp chuyển đổi trên TimeZoneInfo
để thay thế.
Ví dụ: giả sử bạn đang tìm kiếm thời gian hiện tại ở một múi giờ khác. Bạn có thể tìm kiếm các khả năng để làm điều này:
using (TimeZone.CurrentTimeZone = ... )
{
var now = DateTime.Now;
}
Nhưng thay vào đó bạn chỉ đơn giản là nên chuyển đổi từ UTC nơi thích hợp:
var now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(
DateTime.UtcNow, "some other timezone id");
Nguồn
2013-03-28 14:22:11
Chúng tôi không phải là một tính năng mong muốn cho trang web .NET, chúng tôi một câu trả lời chắc chắn cho trang câu hỏi rắn. Xử lý múi giờ là không tầm thường ở thời điểm tốt nhất, thêm lớp phức tạp của một múi giờ cho mỗi luồng chỉ yêu cầu sự cố – Petesh
@Petesh Tôi không có ý định hỏi tại sao thực sự. Tôi đã tự hỏi nếu điều đó là có thể trong một số cách. –
Không có gì ngăn cản bạn tạo ra một đối tượng thread-local cho múi giờ, nó chỉ là không có gì ngoại trừ mã của bạn sẽ sử dụng nó. Bạn nên xem ['ThreadLocal' Class] (http://msdn.microsoft.com/en-us/library/dd642243.aspx) trong .NET cho một cách tầm thường để thực hiện nó. –
Petesh