c# - DateTime 解析包含一年中的某一天的字符串

标签 c# parsing datetime

我正在尝试解析如下格式的字符串:

1900-001T00:00:00Z

转换为 DateTime 对象。中间的位(就在“1900-”之后和“T”之前)应该是一年中的某一天。我知道我需要使用的其余格式化字符串是

yyyy-XXXTHH:mm:ssZ

但是我应该为那个“XXX”输入什么?

最佳答案

自己编写的解析器可能如下所示:

static DateTime ToDt(string date)
{
    var splitYear = date.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
    var splitDays = splitYear[1].Split(new[] { 'T' }, StringSplitOptions.RemoveEmptyEntries);
    var hms = splitDays[1].TrimEnd('Z').Split(':');

    var dt = new DateTime(int.Parse(splitYear[0]), 1, 1, 0, 0, 0);
    dt = dt.AddDays(int.Parse(splitDays[0]) - 1);
    dt = dt.AddHours(int.Parse(hms[0]));
    dt = dt.AddMinutes(int.Parse(hms[1]));
    dt = dt.AddSeconds(int.Parse(hms[2]));

    return dt;
}

static void Main(string[] args)
{
    Console.WriteLine(ToDt("1900-001T00:10:00Z"));
    Console.WriteLine(ToDt("1923-180T12:11:10Z"));
    Console.WriteLine(ToDt("1979-365T23:59:59Z"));
    Console.WriteLine(ToDt("2017-074T18:47:10Z"));


    Console.ReadLine();
}

输出:

01.01.1900 00:10:00
29.06.1923 12:11:10
31.12.1979 23:59:59
15.03.2017 18:47:10

如果

,这将抛出
  • 拆分未返回预期的拆分数量(格式错误)IndexOutOfRangeException
  • 数字无法解析为 int FormatException

并且 int 不会防范“无意义但格式良好”的输入

'2000-999T99:99:99Z'   -->  29.09.2002 04:40:39

关于c# - DateTime 解析包含一年中的某一天的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49305731/

相关文章:

c# - MSMQ 接收时间

c++ - 语言环境格式化时间输出的实现

mysql - 重新格式化输入 DATE 数据

sql-server - SQL 日期时间比较

c# - 谷歌天气 API 403 错误

c# - 读取类型和成员的自定义属性声明

c# - DISTINCT 查询不起作用,它会给我重复的输出列

ruby - 在ruby中解析CSV字符串

javascript - Jison 解析器在第一条规则后停止

ios - 解析 JSON Swift