Accordingtomultiplepostings, Microsoft đã bật khả năng sử dụng cài đặt Ứng dụng - WEBSITE_TIME_ZONE
- để kiểm soát múi giờ của máy chủ web.Thay đổi múi giờ trên ứng dụng web Azure Không hoạt động cho DateTimeOffset.Now?
Để thử điều này, tôi đặt giá trị này thành "Giờ chuẩn miền Đông" là múi giờ địa phương của tôi.
Trên một trang ASP.NET MVC Razor, tôi đã thêm đoạn mã sau:
DateTime.Now: @DateTime.Now
DateTimeOffset.Now: @DateTimeOffset.Now
DateTime.UtcNow: @DateTimeOffset.UtcNow
khi tôi chạy đêm qua này tại 17:10:07 Giờ chuẩn Đông, nó đã cho kết quả như sau:
DateTime.Now: 6/18/2015 5:10:07 PM
DateTimeOffset.Now: 6/18/2015 5:10:07 PM +00:00
DateTime.UtcNow: 6/18/2015 9:10:07 PM
Như bạn có thể thấy, cài đặt được cho phép chính xác DateTime.Now
để trả lại giá trị chính xác trong múi giờ của tôi thay vì UTC như Trang web Azure/Ứng dụng web thường làm. DateTime.UtcNow
luôn trả về giá trị chính xác vì lý do hiển nhiên.
Tuy nhiên, DateTimeOffset.Now
trả về giờ địa phương nhưng với độ lệch là +00:00
- gần như thể đồng hồ đã thay đổi thay vì múi giờ. Điều này xảy ra mặc dù documentation nói (tôi nhấn mạnh):
Gets một đối tượng DateTimeOffset được thiết lập ngày hiện tại và thời gian trên máy tính hiện nay, với bù đắp thiết lập để thời gian địa phương của bù đắp từ Coordinated Universal Time (UTC).
Vì vậy, những gì đang xảy ra mà tác động thiết lập WEBSITE_TIME_ZONE
DateTime.Now
nhưng nó không ảnh hưởng đến DateTimeOffset.Now
? Và có cách nào tôi có thể vượt qua điều đó không?
Để làm rõ, tôi không thực sự muốn thay đổi múi giờ trên máy chủ. Chúng tôi đang làm việc trên một giải pháp độc lập múi giờ thích hợp. Nhưng tôi vẫn tò mò tại sao điều này lại xảy ra.
Bạn có thực sự cần thay đổi múi giờ của máy chủ không? Tôi sẽ cố hết sức để tránh yêu cầu đó. Tôi đồng ý rằng đó là hành vi kỳ lạ của DateTimeOffset.Now, hãy nhớ ... –
Tôi đang tranh luận giải thích rằng trong OP. Tôi rất muốn không thay đổi múi giờ của máy chủ. Chỉ trong khi khám phá các tùy chọn, tôi chạy ngang qua cái này và không hiểu nó hoạt động như thế nào (hoặc tại sao nó không hoạt động theo cách tôi nghĩ). Vì vậy, tôi nghĩ rằng tôi sẽ cố gắng để làm rõ. – Tim
Làm cho tinh thần - và tôi là tất cả để thử nghiệm với những điều bạn sẽ không thực sự muốn làm :) –