字符串到DateTime转换问题

时间:2014-03-23 06:26:43

标签: c# datetime datetime-parsing

您好我有以下格式23/03/2014的字符串,我试图将其转换为以下格式:

string npacked = Convert.ToDateTime(packeddate).ToString("yyyy/MM/dd");

但是我收到了一个错误:

  

字符串未被识别为有效的DateTime

还试过这个:

string npacked = DateTime.Parse(packeddate).ToString("yyyy/MM/dd");

但同样的错误。

4 个答案:

答案 0 :(得分:2)

尝试使用格式为

ParseExact
string npacked = DateTime.ParseExact(packeddate, "dd/MM/yyyy", CultureInfo.InvariantCulture).ToString("yyyy/MM/dd"); 

<强> DEMO

答案 1 :(得分:1)

Convert.ToDateTime正在您的字符串上运行DateTime.Parse()(2014年3月23日)。在默认文化(en-US)中将失败,因为该文化中的日期应格式为MM / DD / YYYY。您需要根据MSDN切换到不同的文化(如法语):

  // Reverse month and day to conform to the fr-FR culture. 
  // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.
  dateString = "16/02/2008 12:15:12";
  try {
     dateValue = DateTime.Parse(dateString);
     Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
  }   
  catch (FormatException) {
     Console.WriteLine("Unable to convert '{0}'.", dateString);
  }

  // Call another overload of Parse to successfully convert string 
  // formatted according to conventions of fr-FR culture.       
  try {
     dateValue = DateTime.Parse(dateString, new CultureInfo("fr-FR", false));
     Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
  }   
  catch (FormatException) {
     Console.WriteLine("Unable to convert '{0}'.", dateString);
  }

拨打&#34; ToString&#34;之后对解析尝试没有任何影响,它只是格式化解析的输出。

答案 2 :(得分:0)

这可能是由于您的系统日期时间格式。您的系统中有mm-dd-yyyy格式,并且您尝试以dd-mm-yyyy格式解析它。尝试将系统日期格式更改为dd/MM/yyyy

答案 3 :(得分:0)

Convert.ToDateTime(string)明确调用DateTime.Parse(string, CultureInfo.CurrentCulture)。这意味着你的两条线都是等价的。

在您的个人资料中,它表示您来自阿拉伯联合酋长国的迪拜。这就是为什么我认为你的CurrentCulture最初可能是ar-AE,但是你的字符串与它ShortDatePattern匹配,这就是它打印的原因;

Convert.ToDateTime("23/03/2014", new CultureInfo("ar-AE")) // 23/03/2014

但是你并没有告诉我们你的CurrentCulture是什么,我们永远都不会知道..但看起来你现在的文化日期分隔符不是/或你现在的文化没有&{ #39; t具有标准日期格式dd/MM/yyyy(大多数文化不太可能)你的两行都失败了(第一种情况更有可能)。

您可以使用DateSeparator轻松地使用/作为DateTime.ParseExact method的文化来解析字符串。通过此方法,您可以指定自定义日期格式。我们可以使用InvariantCulture作为示例;

var date = DateTime.ParseExact("23/03/2014",
                               "dd/MM/yyyy",
                               CultureInfo.InvariantCulture);

现在,让我们考虑使用yyyy/MM/dd格式的代表。

/ specifier具有特殊含义&#34; 将我替换为当前文化的日期分隔符&#34;在自定义日期格式。这意味着如果您的日期分隔符不是/(我认为不是),那么您的date.ToString("yyyy/MM/dd")结果将包含在您的日期分隔符中,而不是/

例如,我来自土耳其,我的文化是tr-TR。我的日期分隔符为.(点)这就是为什么这个例子;

date.ToString("yyyy/MM/dd"); // Prints 2014.03.23 not 2014/03/23 

在这种情况下,您可以使用/日期分隔符作为ToString方法(例如InvariantCulture)中的第二个参数的文化,例如;

date.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture) // Prints 2014/03/23 

或者你可以逃避你的/角色,无论你使用哪种文化;

date.ToString(@"yyyy\/MM\/dd") // Prints 2014/03/23