【问题标题】:Date and time format conversion in C#C#中的日期和时间格式转换
【发布时间】:2012-08-25 06:44:26
【问题描述】:

我有日期/时间格式,例如:

"2012-06-28T08:26:57Z"

那是什么日期/时间格式,如何转换成如下格式,使用C#中的DateTime格式:

"8/24/2012 4:09:17 AM"

【问题讨论】:

标签: c# datetime iso8601


【解决方案1】:

你可以这样做:

string input = "2012-06-28T08:26:57Z";
var dt = DateTime.Parse(input);
string output = dt.ToString(@"MM/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

关于你输入的字符串各部分的含义,看一下这个链接:http://www.w3.org/TR/NOTE-datetime

【讨论】:

  • 如何确定 Parse 会正确解析它?如果他得到一个像"2012-06-07T08:26:57Z" 这样的日期会是 7 月 6 日还是 6 月 7 日?
  • msdn.microsoft.com/en-us/library/1k1skd40.aspx 表示 ISO 8601 格式由 DateTime.Parse 解析。
【解决方案2】:

这是一个ISO8601 日期/时间字符串。这些数字是年、月、日、小时、分钟和秒(按此顺序)。

“T”是占位符。没什么意思。

“Z”表示时间相对于 GMT,而不是本地时区。

【讨论】:

  • T 可能代表“时间”。
【解决方案3】:

尝试将日期转换成这样的字符串

date.ToString("yyyy-MM-dd HH':'mm':'ss")

这里的日期是一个存在日期的变量

或者试试这个

string timeString = "11/12/2009 13:30:00.000";
IFormatProvider culture = new CultureInfo("en-US", true); 
DateTime dateVal = DateTime.ParseExact(timeString, "dd/MM/yyyy HH:mm:ss.fff", culture);

这些链接也可能对您有所帮助。

DateTime.ToString() Patterns

String Format for DateTime [C#]

【讨论】:

    【解决方案4】:

    尝试将通用日期时间转换为本地时间

        var date = DateTime.ParseExact("2012-08-25T06:57:57Z","yyyy-MM-ddTHH:mm:ssZ",System.Globalization.CultureInfo.CurrentCulture);
    var newformat = date.ToString("MM/dd/yyyy HH:mm:ss tt");
    

    【讨论】:

      【解决方案5】:

      尝试使用类似的东西。

      var d = DateTime.Parse("2012-08-24T04:09:17Z");
      Console.WriteLine (d.ToString("G"), CultureInfo.InvariantCulture);
      

      请注意“一般日期/时间模式(长时间)。”在 .net 中是特定于文化的。来自msdn:

      6/15/2009 1:45:30 PM -> 6/15/2009 1:45 PM (en-US)
      6/15/2009 1:45:30 PM -> 15/06/2009 13:45 (es-ES)
      6/15/2009 1:45:30 PM -> 2009/6/15 13:45 (zh-CN)
      

      【讨论】:

      • OP 想要相反的解析。
      • 噢,抱歉,我对多个“this”有疑问。
      【解决方案6】:

      即通用可排序日期格式

      你可以使用下面的代码来转换它

       var dt = DateTime.Parse("2012-06-28T08:26:57Z");
       var newdt = String.Format("{0:G}", dt);  // "6/28/2012 1:56:57 PM"
      

      更新

      你也可以试试这个

      var dt = DateTime.Parse("2012-06-28T08:26:57Z", System.Globalization.CultureInfo.InvariantCulture);
      var newdt = String.Format("{0:G}", dt);
      

      【讨论】:

      • 格式在不同的文化中可能会有很大的不同。您需要使用CultureInfo.InvariantCulture
      【解决方案7】:

      http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx这是对您问题的回答。在这里,您可以看到如何创建不同的日期格式。根据这个资源,你可以使用这样的东西:

      String olddate="2012-06-28T08:26:57Z";
      DateTime date=Convert.ToDateTime(olddate);
      String date1=date.ToString("M/d/yyyy h:m:s tt");
      

      【讨论】:

      • @Oded 已编辑答案,并将查看常见问题解答。感谢批评。
      • Answer 并没有回答这个问题。
      • 它是部分的。 OP 也要求 parsing 原始字符串。这还没有回答。
      • 您似乎根本没有阅读该问题。任何答案与第一个字符串有什么关系?如何将其解析为DateTime 对象?
      • @Oded OP 告诉他有 DateTime 对象,但格式不正确。他想以正确的格式获取 DateTime 对象。正如我所看到的,我的代码会做到这一点。对不起,如果我不正确,但我不知道为什么。
      【解决方案8】:

      你可以简单地使用:)

      DateTime dt = Convert.ToDateTime("2012-06-28T08:26:57Z");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-09
        • 2015-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        相关资源
        最近更新 更多