与string.replace();有两个案子? /如何解析时间字符串

时间:2017-01-25 23:55:14

标签: c# string replace

我有一个timePicker,它返回给我的时间如下:“0:00 am”。但我需要在我的应用程序中从完成时间开始时间并检查它是否已经过了一个小时,两个...

为了只获取TimePicker的数字,我这样做了:

string StartTime = _pickerStarts.Text;
        string StartTime_int = string.Empty;
        int _starts = 0;

        for (int i = 0; i < StartTime.Length; i++)
        {
            if (Char.IsDigit(StartTime[i]))
                StartTime_int += StartTime[i];
        }

        if (StartTime_int.Length > 0)
            _starts = int.Parse(StartTime_int);


        string EndsTime = _pickerEnds.Text;
        string EndsTime_int = string.Empty;
        int _ends = 0;

        for (int i = 0; i < EndsTime.Length; i++)
        {
            if (Char.IsDigit(EndsTime[i]))
                EndsTime_int += EndsTime[i];
        }

        if (EndsTime_int.Length > 0)
            _ends = int.Parse(EndsTime_int);

        // this return method is returning with the 00 on 4:00AM (example). CHANGE IT.
        return _ends - _starts;

但是正如你可能猜到的那样,而不是从早上9点返回,例如9,它返回900.我这样做了一点时间:

string StarTime_Formated = StartTime.Replace(":00", "");

我必须这样做:30个小时。

string StarTime_Formated = StartTime.Replace(":00", ",3");

但是我必须首先检查字符串内容然后格式化它。有没有办法做到这一点(伪代码):

string StarTime_Formated = StartTime.Replace(":00", ",3" && ":00", "");

编辑:回复以下评论:好吧,我正在使用的组件返回一个字符串。这是课堂时间控制。一节课每周两次,每节课1小时,每节课一次,每节课2小时。如果我这样做:

if(_numDuration.Value == 2 && ClassDuration() == 2)

ClassDuration()是此帖中的第一个代码,_numDurationIntegerUpDown,可以选择1或2个小时的课程。

该方法将返回,例如“下午4:00”和“下午6:00”,600-400,并且该方法高于2。我需要它来返回2。正如我所说,我可以做两个不同的.Replace("", "");并检查每个案例,但我想知道我是否不能只string StarTime_Formated = StartTime.Replace(":00", ",3" && ":00", "");

如果可以,我会使用DateTime,但是你知道,这不是我的应用程序,而是......订单。太糟糕了。

我可以这样做,还是应该只保留两个分开的.Replace(),然后查看案例?

2 个答案:

答案 0 :(得分:3)

您尝试解决的问题是如何解析时间字符串?

这很棘手,并且需要多行代码才能正确完成。让DateTime为你做这件事吗?

var start= DateTime.Parse(_pickerStarts.Text);
var end= DateTime.Parse(_pickerEnds.Text);
var result= end-start;
var resultInHours= result.TotalHours;
Console.WriteLine(result);
Console.WriteLine(resultInHours);

----------------------------------------

但是对于字符串替换,您的问题可能会有拼写错误。你想要吗:

string StarTime_Formated = StartTime.Replace(":30", ",3").Replace(":00", "");

答案 1 :(得分:1)

试试这个(你可能需要调整格式,但这应该有效)

var startDate = DateTime.ParseExact(your_start_time_string, "hh:mma", CultureInfo.InvariantCulture);
var endDate = DateTime.ParseExact(your_end_time_string, "hh:mma", CultureInfo.InvariantCulture);
var r = endDate-startDate;
//do further processing on result