将字符串转换为日期时间并格式化为字符串中的特定格式

时间:2013-10-24 10:00:09

标签: c#

字符串是20131024174621,即年份= 2013,月份= 10,日期= 24,小时= 17,分钟= 46,秒= 21 我想要做的是将其转换并格式化为2013-10-24 17:46:21。 我已经尝试过我的运气作为下面的代码然而它返回了这样的错误:

  

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

String timestamp = "20131024174621";
String converted = DateTime.Parse(timestamp).ToString("yyyy-MM-dd HH:mm:ss");

做正确的方法应该是什么?

3 个答案:

答案 0 :(得分:4)

您必须使用ParseExact

void Main()
{
    String timestamp = "20131024174621";
    var date = DateTime.ParseExact(timestamp, "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
    Console.WriteLine (date.ToString("yyyy-MM-dd HH:mm:ss"));
}

输出:

  

2013-10-24 17:46:21

答案 1 :(得分:3)

DateTime.ParseExact( timestamp, "yyyyMMddHHmmss", CultureInfo.InvariantCulture ).ToString( "yyyy-MM-dd HH:mm:ss" );

答案 2 :(得分:1)

由于其他两个答案都是正确的,我想指出问题的根源。

DateTime.Parse method使用Standard Date and Time Format Strings。来自How Standard Format Strings Work

  

在格式化操作中,标准格式字符串只是一个别名   用于自定义格式字符串。使用别名引用的优点   自定义格式字符串是,虽然别名仍然存在   不变量,自定义格式字符串本身可以变化。这个很重要   因为通常是日期和时间值的字符串表示   因文化而异。例如,“d”标准格式字符串表示   使用短日期显示日期和时间值   图案。对于invariant culture,此模式为"MM/dd/yyyy"。对于   fr-FR文化,"dd/MM/yyyy"。对于ja-JP文化,它是   "yyyy/MM/dd"

20131024174621字符串中,您需要yyyyMMddHHmmss格式才能获得当前的文化格式。看起来您的文化没有这种格式,这就是您收到此错误的原因。

对于这种非标准格式字符串,您可以使用custom date format

  

任何非标准日期和时间格式字符串的字符串都是   解释为自定义日期和时间格式字符串。

正如我在第三段中所写,这种日期格式是基于文化的。当您拥有此类自定义日期字符串时,在大多数情况下使用具有特定文化的DateTime.ParseExact Method (String, String, IFormatProvider)是最佳选择。