【问题标题】:ISO8601 formatted string to DateTime [closed]ISO8601 格式化字符串到 DateTime [关闭]
【发布时间】:2016-03-28 17:12:40
【问题描述】:

我有以下 ISO8601 格式的日期时间字符串:

2016-03-28T16:07:00+0200

我想将其转换为 C# DateTime 对象,但我使用的解析方法引发了异常。

目前我有这个:(不起作用)

string format = "yyyy-MM-ddTHH:mm:ss+zzzz";
CultureInfo provider = CultureInfo.InvariantCulture;

// Throws the exception: "String was not recognized as a valid DateTime."
DateTime time = DateTime.ParseExact("2016-03-28T16:07:00+0200", format, provider);

如何让解析函数处理我的字符串?

【问题讨论】:

  • 你到底在问什么?你想做什么却遇到了麻烦?
  • 我想在我的 c# 程序中使用日期。我目前的做法行不通。
  • 你想用它做什么?如果我们无法理解问题,我们将无能为力。 ://
  • 我想和我程序中的其他 DateTime 变量进行比较
  • 这怎么行?你有错误吗?

标签: c# datetime iso8601


【解决方案1】:

我建议使用DateTimeOffset 而不是 DateTime。

var dateString = "2016-03-28T16:07:00+0200";
var date = DateTimeOffset.Parse (dateString);

Console.WriteLine (date.ToString ());

如果要转换为 DateTime 对象

date.UtcDateTime;

它会发出:

3/28/2016 4:07:00 PM +02:00

【讨论】:

  • 感谢您的回复,但我想将其转换为 DateTime 对象,以便在我的程序中进一步使用该对象进行比较。
  • 您可以轻松转换为您想要的任何对象。 Point is DateTimeOffset 最适合不同的时区。
  • @Evert 查看.UtcDateTime DateTimeOffset 的属性
【解决方案2】:

试试DateTime time = DateTime.Parse("2016-03-28T16:07:00+0200");。您的字符串似乎是 format that will be recognized by DateTime.Parse()

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多