如何在没有本地化的情况下在C#中获取日期

时间:2012-01-09 11:35:38

标签: c# mysql date localization

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

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

提前谢谢!

5 个答案:

答案 0 :(得分:3)

您不应该从数据库中将其作为字符串读回来 - 您没有显示您是如何阅读数据的,但是如果您使用某些内容来填充{{1} },或LINQ,或DataTable然后没有涉及字符串格式(假设它已正确存储在数据库中,它看起来像是)。

IDataReader.GetDateTime值本身并非拥有格式,只有DateTime为十进制或十六进制 - 这就是选择转换它很重要,除非你真的需要,否则你应该几乎总是避免做那种格式化。

答案 1 :(得分:2)

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

如果您将日期存储为字符串,您将始终必须确切知道数据库中的格式。

假设日期存储为datedatetime:只需处理这些值,并且在您需要向用户显示之前不要将它们转换为字符串:

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

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

答案 2 :(得分:2)

由于您将日期存储在日期和日期/时间特定表示中,因此格式化根本不会发挥作用(与日期/时间作为字符串存储时的一些高度不鼓励的存储方案相反,格式化很重要,但对于错误的原因)。

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

答案 3 :(得分:0)

您可以使用

直接在查询中设置日期格式

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

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

答案 4 :(得分:0)

改变

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);