netcore liunx docker修改默认的Datetime format

一、问题 :core 项目发布在 liunx docker 下,使用了 ORM 用拉姆达表达式来设置 where 条件,当条件中有 datetime 类型的时候默认生成出来的 sql 语句用的 DateTime.ToString() 如下例

SELECT * FROM #table WHERE CreateTime >='01/01/2020 00:00:00'

这样执行 mysql 或者 mssqlserver 会报错,但又不方便改 ORM 底层的代码

二、解决办法:

在 Startup.cs 文件 Configure 中新增以下代码 (在 IIS 下同样有效):

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            // 设置 CultureInfo
            var zh = new CultureInfo("zh-CN");
            zh.DateTimeFormat.FullDateTimePattern = "yyyy-MM-dd HH🇲🇲ss";
            zh.DateTimeFormat.LongDatePattern = "yyyy-MM-dd";
            zh.DateTimeFormat.LongTimePattern = "HH🇲🇲ss";
            zh.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
            zh.DateTimeFormat.ShortTimePattern = "HH🇲🇲ss";
            IList<CultureInfo> supportedCultures = new List<CultureInfo>
            {
                zh,
            };
            app.UseRequestLocalization(new RequestLocalizationOptions
            {
                DefaultRequestCulture = new RequestCulture("zh-CN"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures
            });
}

三、测试代码:

public IActionResult Test()
        {
            string date = DateTime.Now.ToString();
            return Content(date);
        }

输出结果: 2020-01-07 12:29:12

PS: 注意下 docker 里还需要设置好时区,方法自行搜索