C#,将字符串转换为DateTimeOffset

时间:2017-10-12 16:22:07

标签: c# datetimeoffset tryparse

我正在尝试将字符串转换为DateTimeOffset。这是我的字符串2017/010/23:51:50的示例2017表示年份010表示一年中的某一天,23:51:50表示时间。 我正在尝试以下方式,但它返回我0001-01-01 00:00:00.0000000 +00:00总是没有输入。 我的代码

DateTimeOffset DateTime;
string year = ("2017/010/23:51:50");
DateTimeOffset.TryParse(year, out DateTime);

有什么建议吗?

更新 为简单起见,我没有留下我的问题。我的日期时间是从2017 it could be 2002, 2001文件的名称获取年份(.txt),而日期和时间(010/23:51:50有些已偏移且某些内容没有)来自.txt文件的内容{1}}文件。所以我的输入并不总是一样的。希望这澄清

2 个答案:

答案 0 :(得分:2)

首先用/分割字符串,然后使用dayOfTheYear值和年份来获取年/月/日。接下来拆分时间参数并使用它来获取TimeSpan并将其添加到先前获得的日期。接下来,只需将新获得的日期解析为DateTimeOffset。这段代码应该有效:

        string year = ("2017/010/23:51:50");
        var date = year.Split('/');
        var timeSpanVal = date[2].ToString().Split(':').Select(x=>Convert.ToInt32(x)).ToList();
        TimeSpan ts = new TimeSpan(timeSpanVal[0], timeSpanVal[1], timeSpanVal[2]);
        DateTime newDate = new DateTime(Convert.ToInt32(date[0]), 1, 1).AddDays(Convert.ToInt32(date[1]) - 1)+ts;

        DateTimeOffset.TryParse(newDate.ToString(), out DateTime);

答案 1 :(得分:1)

通过date and time formats查看,我认为您无法解析格式Year/JulianDay/Time。您可以做的是将字符串拆分为多个部分,然后将日期添加到年份

string[] parts = year.Split('/');
DateTime dt = new DateTime(int.Parse(parts[0]), 1, 1); 
dt = dt.AddDays(int.Parse(parts[1]) - 1).Add(TimeSpan.Parse(parts[2]));