在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

.net Core 中DateTime在Linux Docker中与Windows时间不一致

.net core 清风 803℃ 0评论

最近写了一个.net core项目,部署到CentOS并在docker上运行的时候,发现DateTime.Now获取的时间与Windows不一致(定时执行的任务,晚了8个小时),在Windows中可以正确的获得本地时间,而在Linux CentOS 的Docker环境中获取的时间少了8个小时。通过Linux命令查看本机时间,本地时间正确,但.net core在Docker运行获取时间依然是少8个小时。猜测可能是时区的问题,然后就找到了NodaTime的一个库进行获取统一时区的时间,完成后Linux CentOS的Docker环境上获取的时间就与Windows中保持了一致。

NodaTime库需要下载相关包,也可以直接使用Nuget下载。

项目地址

nodatime项目git开源nodatime官网

新增一个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();

除了以上方式之外,可以将Linux时间和Docker容器进行同步。具体详情,请参考。docker容器与Linux主机环境获取时间不一致

转载请注明:清风博客 » .net Core 中DateTime在Linux Docker中与Windows时间不一致

喜欢 (11)or分享 (0)
支付宝扫码打赏 微信打赏
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址