4

字符串具有“ dd/MM/yyyy ”格式的值,例如“ 04/10/2012 ”。这应该转换为 Date wrt Current Culture of OS

我尝试了以下字符串,将韩语作为当前操作系统文化,其中日期格式为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

4 回答 4

7

在我看来,您需要使用固定格式对其进行解析,我认为您当前正在使用“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
于 2012-10-04T08:04:48.603 回答
2

由于您的输入字符串采用固定格式,因此您应该以该格式对其进行解析:

DateTime.ParseExact(dt, "dd/MM/yyyy", CultureInfo.InvariantCulture);
于 2012-10-04T08:05:18.783 回答
1

如果您的字符串具有格式dd/MM/yyyy,那么您必须使用DateTime.ParseExact指定的格式:

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

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

于 2012-10-04T08:06:27.420 回答
0

为什么不使用ToShortDateTimeString()

于 2017-05-22T14:34:38.390 回答