【问题标题】:How do I convert a date string from 'M/d/yyyy h:mm:ss tt' to 'yyyy-dd-mmTHH:mm:ss'? C#如何将日期字符串从 'M/d/yyyy h:mm:ss tt' 转换为 'yyyy-dd-mmTHH:mm:ss'? C#
【发布时间】:2016-09-20 11:25:02
【问题描述】:

我有一个看起来像 5/27/2015 4:49:54 AM 的字符串

我需要它是这种格式:2015-27-05T04:49:54+08:00

我尝试像这样转换它,但它会引发错误:

var convertedDate = DateTime.ParseExact(originalDate, "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK",
                            new CultureInfo("en-US", true));

我也尝试像这样转换它,但它似乎没有做任何事情,convertedDate 最终与 originalDate 相同:

var convertedDate = String.Format("{0:u}", originalDate);

【问题讨论】:

  • 您有一个字符串"5/27/2015 4:49:54 AM" 并使用"yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK" 作为ParseExact 中的格式字符串?这当然行不通。
  • 你需要提供你想要解析from的格式,而不是。这给了你一个日期时间。但是,您似乎需要添加偏移量,因此 DateTimeOffset 类型可能更有用。或者Noda Time 可能更容易使用。
  • @TimSchmelter 说“这当然行不通”没有任何帮助。

标签: c# date parsing datetime time


【解决方案1】:

尝试convertedDate.ToString("yyyy-MM-ddThh:mm:sszzz"),本地计算机上的日期和时间设置可能会影响输出的格式,因此您不能总是依赖内置的格式字符串。

【讨论】:

    【解决方案2】:

    首先将原始string 解析为DateTime。然后将DateTime 格式化为所需格式的string

    var originalDate = "5/27/2015 4:49:54 AM";
    var result = DateTime.ParseExact(originalDate, "M/d/yyyy h:mm:ss tt", CultureInfo.CurrentCulture)
        .ToString("yyyy'-'MM'-'dd'T'HH':'mm':'sszzzz");
    Console.WriteLine(result);
    

    输出

    2015-05-27T04:49:54-04:00

    请注意,您获得的时区偏移量将取决于运行机器的文化,因为它未在原始字符串中指定。

    【讨论】:

      【解决方案3】:

      您需要先解析,然后使用您想要的格式字符串与ToString 翻译。

      试试这个:

      string input = "5/27/2015 4:49:54 AM";
      DateTime originalDate = DateTime.Parse(input);
      string output = originalDate.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK");
      

      如果需要,您可以将 DateTime.Parse 替换为 DateTime.ParseExactDateTime.Parse 将尝试使用您的系统文化进行解析。如果您需要/想要,您可以更具体。

      另外,请记住,格式字符串中的 f 会创建一个强制小数。为了匹配您规定的输出,您应该使用F 或省略。

      https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

      【讨论】:

        【解决方案4】:

        要解析"5/27/2015 4:49:54 AM",您应该使用以下格式字符串:"M/d/yyyy h:mm:ss tt"

        DateTime convertedDate = DateTime.ParseExact(
            "5/27/2015 4:49:54 AM",
            "M/d/yyyy h:mm:ss tt",
            new CultureInfo("en-US", true));
        

        然后您可以使用DateTime.ToString 和所需的格式字符串(似乎是"yyyy-dd-MM'T'hh:mm:sszzz")来获得2015-27-05T04:49:54+08:00 作为输出:

        string result = convertedDate.ToString("yyyy-dd-MM'T'hh:mm:sszzz");  // zzz to get UTC offset
        

        见:The "zzz" Custom Format Specifier

        【讨论】:

          【解决方案5】:

          试试这个代码。

          string inputString = "05/27/2015 04:49:54 AM";
          
          DateTime dt = DateTime.ParseExact(inputString, "M/dd/yyyy H:mm:ss tt",
          System.Globalization.CultureInfo.InvariantCulture);
          
          string outputString = dt.ToString("yyyy-MM-ddTHH:mm:sszzz");
          

          输出字符串将返回值为“2015-05-27T04:49:54+08:00”。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-19
            • 1970-01-01
            相关资源
            最近更新 更多