如何在C#中获取日期,无需本地化

本文关键字:本地化 取日期 获取 | 更新日期: 2023-09-27 18:19:45

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

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

提前谢谢!

如何在C#中获取日期,无需本地化

如果将日期存储为真正的日期或日期时间值,则应用程序将取回原始二进制数据,并且在创建日期值的字符串表示形式之前,不会对其进行本地化。我的猜测是,您正在查看调试器中的值,或者使用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将是您的特定文本表示。

您不应该将其作为字符串从数据库中读回-您还没有显示如何读取数据,但如果您使用某些东西来填充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);