zoukankan      html  css  js  c++  java
  • 【.net Core】DateTime在Linux中与Windows时间不一致

    项目在windows中请求接口正常,换到linux服务器上就提示错误,跟断点看了下原来是token验证被挡住了,两者时间相差8小时。怀疑是linux时间有问题,使用date查看服务器时间显示:

     确实是本地时间。

    当然还有linux服务器本身时间不是CST,而是UTC格式的,可百度搜索:修改区时UTC改为CST

    后来经过排查和百度发现是docker在捣蛋,这里直接贴出解决方案

    1、在项目中新增时间转化类

    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();
            }
        }
    View Code

    使用:DateTime.Now.ToCstTime();

    传送门:https://www.cnblogs.com/1175429393wljblog/p/11692610.html

    ps:此种方式没有实践

    2、在docker中做文章,将linux服务器时间拷贝到docker容器中

    a、在dockerfile中添加时间拷贝语句  【此方法是我选择的,一劳永逸】

    #时区设置
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
    && echo ‘Asia/Shanghai’ >/etc/timezone

    还有b和c方法,没有测试可在博主原文中查看试用

    传送门:https://www.skyfinder.cc/2018/12/14/dockerandhostdatetimenotsame

  • 相关阅读:
    Python 规范
    Hql
    Python
    IIS 日志分析
    NHibernate 知识点整理
    微软开放了.NET 4.5.1的源代码
    自定义消息编码绑定实现
    使用自定义绑定
    WCF安全:通过 扩展实现用户名密码认证
    WCF 几种错误
  • 原文地址:https://www.cnblogs.com/yhnet/p/12971692.html
Copyright © 2011-2022 走看看