最近寫了一個.net core項目,部署到CentOS並在docker上運行的時候,發現DateTime.Now獲取的時間與Windows不一致(定時執行的任務,晚了8個小時),在Windows中能夠正確的得到本地時間,而在Linxu CentOS 的Docker環境中獲取的時間少了8個小時。經過Linxu命令查看本機時間,本地時間正確,但.net core在Docker運行獲取時間依然是少8個小時。猜想多是時區的問題,而後就找到了NodaTime的一個庫進行獲取統一時區的時間,這下在Linxu CentOS的Docker環境上獲取的時間就與Windows中保持了一致。css
新增一個DateTime擴展方法:docker
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保持統一:ide
DateTime.Now.ToCstTime();
除了以上方式以外,能夠將Linxu時間和Docker容器進行同步。具體詳情,請參考。docker容器與Linux主機環境獲取時間不一致
原文連接:https://www.skyfinder.cc/2018/10/01/dotnetcoredatetimenotunified/