如何将格式为“dd / MM / yyyy”的日期字符串转换为OS当前文化日期格式

时间:2012-10-04 07:58:25

标签: c# winforms visual-studio-2008 datetime

字符串的值为“ dd / MM / yyyy ”格式,如“ 04/10/2012 ”。这应该转换为操作系统的日期w.r.t 当前文化

我已尝试使用韩语作为当前文化的操作系统,其中日期格式为 yyyy-MM-dd ,我的代码未获得正确的月值,它将月份值与日期交换:

输入:“ 04/10/2012 ” 输出: 2012-04-10

代码:

DateTime DT;
string dt = "04/10/2012";

DateTimeFormatInfo DateInfo = CultureInfo.CurrentCulture.DateTimeFormat;
DT = Convert.ToDateTime(String.Format ("{0:"+DateInfo .ShortDatePattern +"}", dt.Trim ()), CultureInfo .CurrentCulture);
MessageBox.Show("Date: " + DT.ToShortDateString());

我如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

在我看来,你需要用固定格式解析它,我认为你目前正在用“dd / MM / yyyy”以外的格式解析它,因为日期不明确(如,月,日)可以互换而不会导致无效日期)格式只是切换月和日值。然后当你输出它时,它看起来相反。

使用DateTime.ParseExact强制解析格式,然后使用DateTime上内置的当前文化敏感字符串输出方法来获取格式化字符串:

var date = DateTime.ParseExact("04/10/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture);

MessageBox.Show("Date: " + date.ToShortDateString()); // Assumes current culture is controlling format

答案 1 :(得分:2)

由于输入字符串采用固定格式,因此应以该格式解析:

DateTime.ParseExact(dt, "dd/MM/yyyy", CultureInfo.InvariantCulture);

答案 2 :(得分:1)

如果您的字符串格式为dd/MM/yyyy,那么您 使用指定格式的DateTime.ParseExact

DateTime.ParseExact(dt, "dd/MM/yyyy", CultureInfo.InvariantCulture);

根据当前文化的规则,其他任何东西都会尝试解释字符串 - 正如您所发现的那样,这些规则会失败。

答案 3 :(得分:0)

为什么不使用ToShortDateTimeString()