2013-02-05 83 views
9

我想将日期“01/22/2013 10:00:00”转换为“22/01/2013 10:00:00”,并且我的方法无法识别我的日期字符串。将日期时间转换为英国格式

DateTime dt = DateTime.ParseExact(StartDate, "MM dd yyyy h:mm", CultureInfo.InvariantCulture); 
      StartDate = dt.ToString("dd/M/yyyy"); 
dt = DateTime.ParseExact(EndDate, "MMM dd yyyy h:mm", CultureInfo.InvariantCulture); 
      EndDate = dt.ToString("dd/M/yyyy"); 

我收到此错误:

System.FormatException - String was not recognized as a valid DateTime.

什么是ParseExact正确的字符串格式?

+1

可以很容易地看出,该字符串应该是'MM/DD/YYYY HH:MM:ss'即使不看文档。 – Jon

回答

10

您的日期格式是错误的,因为美国它会是01/22/2013 10:00:00这是MM/dd/yyyy HH:mm:ss。对英国来说将是dd/MM/yyyy

DateTime dt = DateTime.ParseExact(StartDate, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

dt.ToString("dd/MM/yyyy"); 

注意我在这里假设一个24小时制这就是为什么我用HH。如果你想要一个十二小时的时钟,你需要hh,但你也应该把AM/PM等。

1

你正在使用斜线,你的日期字符串中有“秒”部分。您需要更改ParseExact方法中提供的格式:

string StartDate = "01/22/2013 10:00:00";    
DateTime dt = DateTime.ParseExact(StartDate, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 
StartDate = dt.ToString("dd/M/yyyy"); 
+0

'hh'不正确,应该是'HH'。 – Jon

+0

它的工作原理是因为10有效。尝试使用23,看看会发生什么。 – Lloyd

+0

但英国时间使用am/pm afaik? – daryal

5

使用此代码:

DateTime dt = DateTime.ParseExact(StartDate, "MM/dd/yyyy hh:mm:ss", CultureInfo.InvariantCulture); 
      StartDate = dt.ToString("dd/MM/yyyy hh:mm:ss"); 

通知的变化的ParseExact格式字符串。

1

试试这个

var str = "01/22/2013 10:00:00"; 
var date = DateTime.ParseExact(str, "MM/dd/yyyy HH:mm:ss", new CultureInfo("en-GB")); 
var res = date.ToString("dd/MM/yyyy HH:mm:ss", new CultureInfo("en-GB")); 
Console.WriteLine(res); 
Console.WriteLine("22/01/2013 10:00:00" == res); 
相关问题