字符串的值为“ 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());
我如何解决这个问题?
答案 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()