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

本文关键字:格式 转换 字符串 定格 日期 时间 | 更新日期: 2023-09-27 18:36:52

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

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

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

应该如何做对?

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

你必须

使用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

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

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

DateTime.Parse方法使用 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)是最佳选择。