字符串是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");
做正确的方法应该是什么?
答案 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)
是最佳选择。