Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串转换为日期时间,并将格式转换为字符串中的特定格式_C# - Fatal编程技术网

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

C# 将字符串转换为日期时间,并将格式转换为字符串中的特定格式,c#,C#,字符串为20131024174621,即年=2013,月=10,日期=24,小时=17,分钟=46,秒=21 我想做的是把它转换成2013-10-2417:46:21格式。 我尝试了以下代码,但它返回了这样的错误: 字符串未被识别为有效的日期时间 正确的方法应该是什么?您必须使用ParseExact DateTime.ParseExact( timestamp, "yyyyMMddHHmmss", CultureInfo.InvariantCulture ).ToString( "yyyy-MM

字符串为20131024174621,即年=2013,月=10,日期=24,小时=17,分钟=46,秒=21 我想做的是把它转换成2013-10-2417:46:21格式。 我尝试了以下代码,但它返回了这样的错误:

字符串未被识别为有效的日期时间


正确的方法应该是什么?

您必须使用
ParseExact

DateTime.ParseExact( timestamp, "yyyyMMddHHmmss", CultureInfo.InvariantCulture ).ToString( "yyyy-MM-dd HH:mm:ss" );
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-2417:46:21


既然另外两个答案是正确的,我想指出你问题的根源

使用。从

在格式化操作中,标准格式字符串只是一个别名 用于自定义格式字符串。使用别名引用的优点 尽管别名保持不变,但自定义格式字符串的 不变,自定义格式字符串本身可能会有所不同。这很重要 因为日期和时间值的字符串表示形式通常 文化不同。例如,“d”标准格式字符串表示 使用短日期显示日期和时间值 图案对于
不变区域性
,此模式为
“MM/dd/yyyy”
。对于
fr-fr
文化,它是
“dd/MM/yyyy”
。对于
jajp
文化,它是
“yyyy/MM/dd”

20131024174621
字符串中,您需要当前区域性的
yyymmddhhmmss
格式。看起来您的区域性没有此格式,这就是为什么会出现此错误

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

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


正如我在第三段中所写,这种日期格式是基于文化的。当您有这种自定义日期字符串时,在大多数情况下,与特定区域性一起使用是最佳选择。

我建议您也在这两个调用中明确指定固定区域性,否则在使用不同日历的区域性中,它的行为会有所不同。谢谢,我非常了解固定文化,并且总是使用它。我只是认为当字符串中只有数字(没有特定于区域性的分隔符,也没有月份名称)时,这没有多大意义。不过,我刚刚重新检查了MSDN,现在我完全同意您的意见-建议在这种情况下使用不变区域性。谢谢!在此之前,我从未意识到文化的不变@贾斯特安德烈:重要的一点是,它也决定了日历。因此,年/月/日的特定组合可能在一个日历中有效,但在另一个日历中无效。我个人默认使用不变的区域性。。。
void Main()
{
    String timestamp = "20131024174621";
    var date = DateTime.ParseExact(timestamp, "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
    Console.WriteLine (date.ToString("yyyy-MM-dd HH:mm:ss"));
}