2017-10-12 175 views
0

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

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

有什么建议吗?

更新 为简单起见,我没有留下我的问题。我的日期时间是从.txt文件的名称获得年份(2017 it could be 2002, 2001),并从该文件的内容获取日期和时间(010/23:51:50一些已经抵消,一些内容则不)。所以我的意见并不总是相同的。希望这个澄清

+0

当你说*今年的某天*,你的意思是从1到365? –

+2

它返回* false *,永远不会忽略。使用Parse()来保持自己的诚实。 –

+0

你是对的@OfirWinegarten – Shaif

回答

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); 
+0

一个不需要经过一个字符串来从'DateTime'转换到'DateTimeOffset'。但是,您需要知道您要使用的偏移量。 –

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]));