c# - 如何使用 DateTimeOffset 解析没有年份的 ISO 8601 日期?

标签 c# datetime-format iso8601 datetimeoffset datetime-parsing

我需要解析不包含年份和月份部分的 ISO 8601 日期,例如:

--0412T102200Z 

我正在尝试使用以下代码,该代码会引发异常“输入中必须至少存在包含年份的部分日期。”:

DateTimeOffset.ParseExact("--0412T102200Z", "'--'MMdd'T'HHmmssZ",
           CultureInfo.InvariantCulture, DateTimeStyles.None);

如何解析此类日期?有机会避免在解析之前手动将“--”替换为年份吗?

最佳答案

虽然在某些格式中可能允许用年份替换破折号,例如 XML XSD Schemas ,从技术上讲,这不是符合 ISO-8601 标准的值。

问问自己这个值意味着什么 - 它可能意味着“每年在UTC的这个月、日和时间”。换句话说,这是一种重复模式。

.Net DateTimeDateTimeOffset 类型无法存储重复模式。它们用于表示特定的日期和时间。

不幸的是,没有一年就无法解析它。您首先需要确定要将模式应用到哪一年,用 String.Replace 手动替换破折号,然后然后您就可以解析它。

关于c# - 如何使用 DateTimeOffset 解析没有年份的 ISO 8601 日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20390133/

相关文章:

sql-server-2008-r2 - 如何在SQL Server中将datetime值转换为yyyymmddhhmmss?

sqlite - sqlite中的时间戳格式

PHP - 格式日期 ISO8601?

javascript - 如何在 JavaScript 中输出 ISO 8601 格式的字符串?

C# 使用预先创建的对象调用 Powershell

c# - 如何创建固定大小的容器并将正确的值放入正确的容器中(此逻辑的高效算法)

c# - 关于时间和空间: Bloom filter, Hash table和Dictionary哪个好?

r - 自 1960 年 1 月 1 日起将日期时间字符串转换为毫秒的 double 值

JQ:将 UNIX 时间戳转换为日期时间

c# - 将 ViewData 传递给部分 View