我正在尝试解析如下格式的字符串:
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/