【问题标题】:Why in .Net C# does the Date format change after reading from MySql?为什么在.Net C# 中从 MySql 读取后日期格式会发生变化?
【发布时间】:2019-09-16 19:03:03
【问题描述】:

在 MySql 中,我在我的 PC 上将日期设置为格式 yyyy-mm-dd,这是我在查看 MySql 表中的数据时看到的格式。当我阅读日期并使用时:

DateTime.ParseExact(tempActiveSince, "yyyy/MM/dd hh:mm:ss tt", null).ToString("dd MMMM yyyy");

完美运行。但是现在已经将它部署到生产机器上,MySql 中的日期格式并没有改变,但是当我从数据库中读取时:

string tempActiveSince = reader["activesince"].ToString();

我收到日期格式错误。当我打印出 tempActiveSince 的结果时,我得到了 dd/mm/yyyy 的格式。我已确保生产机器上的区域设置与我的电脑一致,但仍然不正确。

有人对我如何解决这个问题有指导意见吗?

谢谢

【问题讨论】:

  • 为什么要将日期读入字符串?您应该将日期保留为日期(或日期时间)数据类型,并在演示文稿中保留格式(显示在屏幕上、报告中等)。
  • 日期没有格式——它们只是一个数值——所以它不能改变。格式只是将日期显示给人们以便他们阅读的方式。如果您“在 MySQL 中将日期设置为 yyyy-mm-dd”,听起来您正在存储一个字符串,这几乎总是一个坏主意。
  • “activesince”列的类型到底是什么?我希望它不是 varchar
  • 该列的日期类型不是字符串

标签: c# .net date


【解决方案1】:

reader["activesince"] 已经是一个日期时间。您正在调用 ToString() ,这取决于 CurrentCulture 设置,可能因环境而异。

这里有两节课:

  1. 这样读取日期:(DateTime)reader["activesince"]
  2. 转换为字符串时,请始终指定文化,例如。 G。 reader["activesince"].ToString(CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:
    DateTime dt = DateTime.ParseExact(reader["activesince"].ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
    
    string tempActiveSince = dt.ToString("yyyy/MM/dd hh:mm:ss tt", CultureInfo.InvariantCulture);
    

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多