TimeSpan转换问题(用天而不是小时)

时间:2018-11-20 14:18:10

标签: c# timespan

我有一个文本框,其文本为25:00:00。这表示25个小时。我正在尝试使用以下代码将此文本转换为时间跨度:

TimeSpan tTime = TimeSpan.Parse(man_hours_nbr.Text);

        double sum10 = tTime.TotalHours;
        hours = Convert.ToDecimal(sum10);

问题在于tTime看到的是25天(600小时)而不是25小时。为什么要阅读25天?然后,我需要将时间跨度设置为十进制,以便可以这样显示。我究竟做错了什么?谢谢

4 个答案:

答案 0 :(得分:2)

您可以这样做:

string[] splitTime = man_hours_nbr.Text.Split(':');
int hours = Int32.Parse(splitTime[0]);
int minutes = Int32.Parse(splitTime[1]);
int seconds = Int32.Parse(splitTime[2]);
double totalHours = hours + minutes / 60.0 + seconds / 3600.0;

我只是用冒号将文本分成几部分。然后解析这些值,最后将它们加在一起。

答案 1 :(得分:1)

TimeSpan struct对于可以使用基督教的值有限制。如果您仅在文本框中捕获工时,则可以这样做(如下所示)。为简单起见,我省略了明显的错误检查,例如最大最小值和空值。

var textBoxValue = "25:20:00";
var hours = int.Parse(textBoxValue.Split(':')[0]) + int.Parse(textBoxValue.Split(':')[1])/60d + int.Parse(textBoxValue.Split(':')[2]) / 3600d;

答案 2 :(得分:0)

TimeSpan.ParseExact使用时钟时间而不是时间量。因此,您不能根据需要使用它。据我了解,您想从指定的字符串中获取总小时数,格式为“小时:分钟:秒”。希望下面的代码可以帮助您解决问题。已经发布了答案。如果遇到问题,下面的代码将是我要做的事情。

代码中的这一行

var hours = GetHours(man_hours_nbr.Text);

这是GetHours方法

public static double GetHours(string timeString)
{
    var splitTime = timeString.Split(':');
    if (splitTime.Length != 3)
        throw new ArgumentException("Time string not in format HH:MM:SS");

    var hours = Convert.ToDouble(splitTime[0]);
    var mins = Convert.ToDouble(splitTime[1]);
    var seconds = Convert.ToDouble(splitTime[2]);

    var time = new TimeSpanBuilder()
        .WithHours(hours)
        .WithMinutes(mins)
        .WithSeconds(seconds)
        .Build();

    return time.TotalHours;
}

这是TimeSpanBuilder类,(使用构建器模式)

public class TimeSpanBuilder
{
    private TimeSpan _ts = TimeSpan.Zero;

    public TimeSpanBuilder WithHours(double hours)
    {
        _ts = _ts.Add(TimeSpan.FromHours(hours));
        return this;
    }

    public TimeSpanBuilder WithMinutes(double mins)
    {
        _ts = _ts.Add(TimeSpan.FromMinutes(mins));
        return this;
    }
    public TimeSpanBuilder WithSeconds(double seconds)
    {
        _ts = _ts.Add(TimeSpan.FromMinutes(seconds));
        return this;
    }

    public TimeSpan Build()
    {
        return _ts;
    }
}

答案 3 :(得分:-1)

正如评论中指出的那样,您不能直接解析25小时。但是您可以做的是将小时数解析为几天,然后从TimeSpan中获取总时数。大致如下:

Ctrl + K

@“ dd ...”字符串是输入的格式,其中“ d”代表日,“ h”代表小时,“ m”代表分钟,“ s”代表秒。因此,您输入的时间为1天1小时(总共25小时)为“ 01:01:00:00”