从文本文件中读取字符串并将其用作TimeSpan

时间:2014-07-17 00:38:17

标签: c# .net

我有一个包含两行的文本文件。它们都包含这种格式的小时数。

  

14,0,0

     

15,0,0

我正在用C#读取这个文本文件并将两行分成两个不同的字符串:

         if (File.Exists(txtFile))
            {
                string[] lines = File.ReadAllLines(txtFile);
                startHour = lines[0];
                endHour = lines[1];
            }

所以startHour = 14,0,0和endHour = 15,0,0

            TimeSpan start = new TimeSpan(14, 0, 0);
            TimeSpan end = new TimeSpan(15, 0, 0);
            TimeSpan now = DateTime.Now.TimeOfDay;


            if (now <= end && now >= start)
            {
                Console.WriteLine("between the hour");
            }
            else
            {
                Console.WriteLine("dont match");
            }

我想要完成的是用文本文件中的值替换开始和结束TimeSpan的硬编码小时

            TimeSpan start = new TimeSpan(14, 0, 0);
            TimeSpan end = new TimeSpan(15, 0, 0);

当我尝试这个时:

TimeSpan start = new TimeSpan(startHour);

我收到错误:

  

无法从'System.TimeSpan'转换为'long'

我尝试使用TimeSpan.Parse(startHour),但它无效。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

有些事情:

var startLine = lines[0].Split(',');
var endLine = lines[1].Split(',');

var startHour = int.Parse(startLine[0]);
var startMin = int.Parse(startLine[1]);
var startSec = int.Parse(startLine[2]);

var endHour = int.Parse(endLine[0]);
var endMin = int.Parse(endLine[1]);
var endSec = int.Parse(endLine[2]);

TimeSpan start = new TimeSpan(startHour, startMin , startSec);
TimeSpan end = new TimeSpan(endHour, endMin, endSec);

答案 1 :(得分:1)

TimeSpan有4个重载方法,其中没有一个表示如果你将一个字符串传递给它的构造函数,它将解析并产生时间跨度对象。所以错误是因为

startHour = lines[0];

映射到TimeSpan的长构造函数。

要解决这个问题,你必须使用类似的东西

var SplitTime = lines[0].Split(',');

TimeSpan sample = new TimeSpan(SplitTime[0], SplitTime[1], SplitTime[2]);

答案 2 :(得分:0)

TimeSpan.ParseExact可以解决这个问题:

TimeSpan.ParseExact(lines[0], "h','m','s", CultureInfo.CurrentCulture)

答案 3 :(得分:-1)

您可以尝试使用TimeSpan.ParseExact方法。