如何在C#中获取日期,无需本地化
本文关键字:本地化 取日期 获取 | 更新日期: 2023-09-27 18:19:45
我的C#应用程序必须从MySQL数据库中读取一些日期。我遇到的问题是,日期的格式取决于系统本地化设置。
我的问题是,无论本地化设置如何,我是否可以始终以yyyy-MM-dd hh:MM:ss和yyyy-MM-dd的格式获取日期。
提前谢谢!
如果将日期存储为真正的日期或日期时间值,则应用程序将取回原始二进制数据,并且在创建日期值的字符串表示形式之前,不会对其进行本地化。我的猜测是,您正在查看调试器中的值,或者使用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
将是您的特定文本表示。
您不应该将其作为字符串从数据库中读回-您还没有显示如何读取数据,但如果您使用某些东西来填充DataTable
、LINQ或IDataReader.GetDateTime
,则不涉及字符串格式设置(假设它正确存储在数据库中,看起来就是这样)。
DateTime
值本质上没有格式,就像int
是十进制或十六进制一样-重要的是您选择来转换它,除非您真的需要,否则您几乎应该总是避免进行这种格式设置。
由于您将日期存储在特定于日期和日期/时间的表示中,因此格式化根本不起作用(与一些非常不鼓励的存储方案相反,当日期/时间存储为字符串时,格式化确实很重要,但原因不正确)。
当你从C#代码中查询MySQL时,无论你的语言环境是什么,你都会得到正确的日期。它们将根据语言环境的不同而显示,但无论语言环境设置如何,它们都将表示正确的日期。
您可以使用直接在查询中格式化日期
date_format(dob,'%d/%m/%Y')
select date_format(dob,'%d/%m/%Y') dob from student where Id=1
更改
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);