【问题标题】:How to get date in C#, without localisation如何在 C# 中获取日期,无需本地化
【发布时间】:2012-01-09 11:35:38
【问题描述】:

我的 C# 应用程序必须从 MySQL 数据库中读取一些日期。我遇到的问题是日期格式取决于系统本地化设置。

我的问题是,无论本地化设置如何,我是否可以始终以 yyyy-MM-dd hh:mm:ss 和 yyyy-MM-dd 格式获取日期。

提前谢谢你!

【问题讨论】:

  • MySQL中表示日期的列的数据类型是什么?
  • 日期和日期时间(我在几个不同的领域都使用它们)
  • 您能否提供一个代码示例来演示您在说什么?我不确定您是在谈论与 MySQL 的通信,还是从数据库中读取日期时间并希望将其呈现给用户。
  • 问题是您从数据库获得的值因地区而异吗?那么问题并不在 C# 中。

标签: c# mysql date localization


【解决方案1】:

您不应该将它作为 字符串 从数据库中读取 - 您还没有展示您是如何读取数据的,但是如果您使用某些东西来填充 DataTable,或 LINQ 或 IDataReader.GetDateTime 则不涉及字符串格式(假设它已正确存储在数据库中,看起来确实如此)。

DateTime 值本质上具有格式,就像 int 是十进制或十六进制一样 - 这是您选择转换它的方式这很重要,除非您真的需要,否则您几乎应该始终避免进行这种格式化。

【讨论】:

    【解决方案2】:

    如果您将日期存储为真正的日期或日期时间值,您的应用程序将获取原始二进制数据,并且在您创建日期值的字符串表示之前不会对其进行本地化。我的猜测是您正在查看调试器中的值或使用Console.WriteLine(theValue);,它将使用当前语言环境。将非字符串值转换为字符串时,始终包含所需的格式和/或所需的文化。

    如果您将日期存储为字符串,您将始终需要准确了解数据库中的格式。

    假设日期存储为date 或datetime:只需按原样处理值,在需要将它们显示给用户之前不要将它们转换为字符串:

    DateTime theValue = theReader.GetDateTime(fieldOrdinal);
    var theValueAsText = theValue.ToString(CultureInfo.InvariantCulture);
    var specificTextRepr = theValue.ToString("yyyy-MM-dd HH:mm:ss");
    

    theValueAsText 变量将是一个与特定文化无关的字符串表示形式。 specificTextRepr 将是您的特定文本表示。

    【讨论】:

      【解决方案3】:

      由于您将日期存储在日期和日期/时间特定的表示形式中,因此格式根本不会影响它(与将日期/时间存储为字符串时的一些非常不鼓励的存储方案相反,当格式确实很重要时,但对于一个错误的理由)。

      当您从 C# 代码查询 MySQL 时,无论您的语言环境是什么,您都将获得正确的日期。它们将根据区域设置显示不同,但无论区域设置如何,它们都将表示正确的日期。

      【讨论】:

        【解决方案4】:

        您可以使用

        直接在查询中格式化日期

        date_format(dob,'%d/%m/%Y')

        select date_format(dob,'%d/%m/%Y') dob from student where Id=1
        

        【讨论】:

          【解决方案5】:

          改变

          CurrentDate = DateTime.Now.ToString("MMM d, yyyy");
          CurrentTime = DateTime.Now.ToString("hh:mm tt");
          

          到

           CurrentDate = DateTime.Now.ToString("MMM d, yyyy",CultureInfo.InvariantCulture);
           CurrentTime = DateTime.Now.ToString("hh:mm tt", CultureInfo.InvariantCulture);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-10-28
            • 2010-10-01
            • 1970-01-01
            • 2021-07-06
            • 1970-01-01
            • 2018-07-02
            • 2016-05-26
            • 2017-11-22
            相关资源
            最近更新 更多