2013-01-10 63 views
6

C# cung cấp một cách để lấy ngày hiện tại theo DateTime.Now. Nhưng vấn đề là máy chủ của tôi ở Hoa Kỳ và tôi nhận được thời gian ở Hoa Kỳ khi tôi sử dụng DateTime.NowC# và Giờ địa phương hiện tại cho các quốc gia khác nhau

Có cách nào để có thời gian địa phương hiện tại cho một quốc gia cụ thể trong C# không? (Tôi có miền địa phương của mỗi người dùng, vì vậy nếu tôi có thể nhận được thời gian hiện tại cho từng miền địa phương thì tôi an toàn)

Tôi đã xem cách using Time Zone nhưng sau đó tôi phải giữ múi giờ so với quốc gia.

Tôi đã tìm kiếm và hầu hết câu hỏi ở đây là về chuyển đổi thời gian UTC thành giờ địa phương và ngược lại. Hy vọng ai đó sẽ có thể khai sáng cho tôi.

+1

Tôi không đưa ra một giải pháp, nhưng đọc blog [Whats sai với datetime nào] (http: // noda-time.blogspot.in/2011/08/what-wrong-with-datetime-anyway.html) cho các sự cố liên quan đến DateTime/DateTimeOffet. . – Tilak

+0

[Nhận múi giờ theo quốc gia và khu vực] (http://stackoverflow.com/q/7977736) –

+1

Lưu ý rằng một số quốc gia trải qua một số múi giờ. Vì vậy, biết chỉ có đất nước có thể không đủ. Hiểu rõ hơn về múi giờ của người dùng từ máy tính của anh ấy. – Guillaume

Trả lời

4

Tiết kiệm thời gian của bạn trong máy chủ bằng thời gian UTC (DateTime.UtcNow) và sau đó tùy thuộc vào múi giờ của người dùng, bạn sẽ thay đổi thời gian này. Không bao giờ lưu giờ địa phương trong db

+0

Bạn đã đọc [Whats sai với datetime anyway] (http://noda-time.blogspot.in/2011/08/what-wrong-with-datetime-anyway.html). Ngày giờ + múi giờ địa phương + Ngày Tiết kiệm ánh sáng không đơn giản để giải quyết khi xuất hiện – Tilak

+0

xem bài đăng này http://stackoverflow.com/questions/8614323/convert-server-utc-time-to-client-local-time –

+0

nó giống như DateTime.Now.ToUniversalTime()? –

2

Chỉ cần nhìn vào lớp TimeZoneInfo. Bạn sẽ có thể chuyển đổi đến và từ địa phương đến máy chủ thời gian thông qua đó trong khi vẫn duy trì DST (Daylight Savings time).

DateTimeOffset newTime = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("AppTimeZone")); 

Bạn cũng có thể tìm thấy một thi hành mã nguồn mở Time Zone bởi một trong những Đại Jon Skeet Noda Time

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