我的C#应用程序必须从MySQL数据库中读取一些日期。我遇到的问题是日期格式取决于系统本地化设置。
我的问题是,如果有可能我总是以格式yyyy-MM-dd hh:mm:ss和yyyy-MM-dd获取日期,无论本地化设置如何。
提前谢谢!
答案 0 :(得分:3)
您不应该从数据库中将其作为字符串读回来 - 您没有显示您是如何阅读数据的,但是如果您使用某些内容来填充{{1} },或LINQ,或DataTable
然后没有涉及字符串格式(假设它已正确存储在数据库中,它看起来像是)。
IDataReader.GetDateTime
值本身并非拥有格式,只有DateTime
为十进制或十六进制 - 这就是选择转换它很重要,除非你真的需要,否则你应该几乎总是避免做那种格式化。
答案 1 :(得分: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
将是您的特定文字表示。
答案 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);