【问题标题】:Convert string to date time and format to specific format in string将字符串转换为日期时间并将格式转换为字符串中的特定格式
【发布时间】:2013-10-24 10:00:09
【问题描述】:

字符串是 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");

正确的做法应该是什么?

【问题讨论】:

    标签: c#


    【解决方案1】:

    你必须使用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

    【讨论】:

      【解决方案2】:
      DateTime.ParseExact( timestamp, "yyyyMMddHHmmss", CultureInfo.InvariantCulture ).ToString( "yyyy-MM-dd HH:mm:ss" );
      

      【讨论】:

      • 我鼓励您在这两个调用中也明确指定不变的文化,否则它在使用不同日历的文化中会表现不同。
      • 谢谢,我非常了解不变的文化并一直使用它。我只是认为字符串中只有数字(没有文化特定的分隔符和月份名称)时没有多大意义。但是,我刚刚重新检查了 MSDN,现在完全同意您的看法 - 建议在这种情况下使用不变文化。
      • 谢谢!在此之前,我从未意识到不变的文化!
      • @JustAndrei:重要的是它也决定了日历。因此,年/月/日的特定组合可能在一个日历中有效,但在另一个日历中无效。我哪个 ParseExact 默认使用不变的文化,个人...
      【解决方案3】:

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

      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) 是最佳选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 2014-09-12
        • 1970-01-01
        • 2014-08-10
        • 2020-01-20
        相关资源
        最近更新 更多