.net Core 中DateTime在Linux Docker中與Windows時間不一致


最近寫了一個.net core項目,部署到CentOS並在docker上運行的時候,發現DateTime.Now獲取的時間與Windows不一致(定時執行的任務,晚了8個小時),在Windows中可以正確的獲得本地時間,而在Linxu CentOS 的Docker環境中獲取的時間少了8個小時。通過Linxu命令查看本機時間,本地時間正確,但.net core在Docker運行獲取時間依然是少8個小時。猜測可能是時區的問題,然后就找到了NodaTime的一個庫進行獲取統一時區的時間,這下在Linxu CentOS的Docker環境上獲取的時間就與Windows中保持了一致。

新增一個DateTime擴展方法:

public class TimeUtil { public static DateTime GetCstDateTime() { Instant now = SystemClock.Instance.GetCurrentInstant(); var shanghaiZone = DateTimeZoneProviders.Tzdb["Asia/Shanghai"]; return now.InZone(shanghaiZone).ToDateTimeUnspecified(); } } public static class DateTimeExtentions { public static DateTime ToCstTime(this DateTime time) { return TimeUtil.GetCstDateTime(); } } 

  在程序中獲取時間都通過如下方法,即可實現在Windows和Linux保持統一:

DateTime.Now.ToCstTime();  
 
除了以上方式之外,可以將Linxu時間和Docker容器進行同步。具體詳情,請參考。docker容器與Linux主機環境獲取時間不一致

原文鏈接:https://www.skyfinder.cc/2018/10/01/dotnetcoredatetimenotunified/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM