C# 将日期反转为DD/MM/YYYY
我有一个具有多种语言的应用程序,葡萄牙语和西班牙语使用C# 将日期反转为DD/MM/YYYY,c#,datetime,C#,Datetime,我有一个具有多种语言的应用程序,葡萄牙语和西班牙语使用DD/MM/YYYY,而英语则需要使用MM/DD/YYYY。我在用这个 if (Culture == "English (United States)") { var dataInicial = DateTime.ParseExact(dtini.ToString(), "MM-dd-yyyy h:mm tt", null); var dataFinal = DateTime.ParseExact(dtfim.ToString
DD/MM/YYYY
,而英语则需要使用MM/DD/YYYY
。我在用这个
if (Culture == "English (United States)")
{
var dataInicial = DateTime.ParseExact(dtini.ToString(), "MM-dd-yyyy h:mm tt", null);
var dataFinal = DateTime.ParseExact(dtfim.ToString(), "dd-MM-yyyy h:mm tt", null);
}
但它不起作用,它是给予
“字符串未被识别为有效的日期时间。”
我尝试了“MM dd yyyy h:MM tt”和“dd MM yyyy h:MM tt”,但得到了相同的错误
第一个问题完成了,现在我有一个反转问题,字符串转换为日期时间。在grdCount.Cells[2]中。文本我有“15/12/2015”我想转换为12/15/2015,但我得到的是“字符串未被识别为有效的日期时间”
更改日期时间格式,使小时为两位数
hh
MM-dd-yyyy hh:mm tt
及
我相信您正在寻找的是“通用”日期时间格式说明符(“g”和/或“g”) 这将为您完成繁重的工作,并根据用户机器的文化输出“通用”(顾名思义)日期格式。以下是从第页复制的结果: 您可以在对DateTime.ToString()的调用中使用此格式,并获取一个文化上合适的字符串进行解析
顺便说一下,根据你的例子,你可以考虑完全放弃这个字符串转换。看起来你所做的只是把一个日期时间转换成一个字符串,这样你就可以把它转换回日期时间,这是没有必要的,除非
dtini
和dtfim
(它们代表什么?)是某种奇怪的用户输入对象。正如@Aybe建议的那样,尝试用不变的区域性来处理日期。或者强制您正在使用的UI元素使用当前区域性格式:。也许您应该在代码中使用不变区域性处理所有日期,然后使用特定区域性显示它们(这将简化您的过程)。区域性的值是什么,dtini
和您的CurrentCulture
到底是什么?看起来您的目的几乎是获取现有的日期值并更改其外观。如果是这种情况,您将不使用DateTime.ParseExact
,而是使用自定义格式显示它,例如dtini.ToString(“dd-MM-yyyy”)
(这假设dtini
和dtfim
已经是DateTime
变量)那么“MM-dd-yyyyyy hh:MM-tt”和“dd-MM-yyyyyyy hh:MM-tt”呢?你试过了吗?@ViniciusCano你的dtini
似乎已经是Datetime
,这就是为什么你甚至不需要解析任何东西。回答得好,教会了我一些新东西。缺点可能是在美国机器上会说西班牙语,所以我可以看到处理应用程序逻辑的好处,但肯定是一个很酷的技巧。谢谢。始终最好让框架完成工作,对吗也就是说,当前机器的区域性设置独立于地理位置。因此,西班牙用户最有可能使用西班牙语的windows(例如),因此他们将获得“西班牙语”日期和时间格式。如果他们使用的是en-us文化,它将显示美国英语格式。
MM-dd-yyyy hh:mm tt
dd-MM-yyyy hh:mm tt
string formatted = myDateTime.ToString("g");
2009-06-15T13:45:30 -> 6/15/2009 1:45:30 PM (en-US)
2009-06-15T13:45:30 -> 15/06/2009 13:45:30 (es-ES)
2009-06-15T13:45:30 -> 2009/6/15 13:45:30 (zh-CN)