C# string.Replace();有两个案例如何解析时间字符串
我有一个时间选择器,它返回给我的时间像:“0:00am”。但是我需要在我的应用程序中从一个完成时间中减去一个开始时间,并检查它是否已经过了一个小时,两个小时 为了只获取计时器的编号,我做了以下操作:C# string.Replace();有两个案例如何解析时间字符串,c#,string,replace,C#,String,Replace,我有一个时间选择器,它返回给我的时间像:“0:00am”。但是我需要在我的应用程序中从一个完成时间中减去一个开始时间,并检查它是否已经过了一个小时,两个小时 为了只获取计时器的编号,我做了以下操作: string StartTime = _pickerStarts.Text; string StartTime_int = string.Empty; int _starts = 0; for (int i = 0; i < StartTime
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;
我必须这样做:30小时
string StarTime_Formated = StartTime.Replace(":00", ",3");
但是我必须先检查字符串内容,然后格式化它。有没有办法做到这一点(伪代码):
EDIT:响应下面的注释:嗯,我使用的组件返回一个字符串。这是为了控制上课时间。一节课可以是每周两次,每节课1小时,或者每周一次,每节课2小时。如果我这样做:
if(_numDuration.Value == 2 && ClassDuration() == 2)
ClassDuration()
是本文中的第一个代码,并且\u numDuration
是一个整数下降
来选择1或2小时的课程
方法将返回,例如“4:00pm”和“6:00pm”,600-400,这比2高很多。我需要它返回2。正如我所说,我可以做两种不同的编码>并检查每个案例,但我想知道我是否不能只字符串StarTime\u formatted=StartTime.Replace(“:00”,”,3“&&&&“:00”,”)代码>
如果可以的话,我会使用DateTime,但你看,它不是我的应用程序,而且。。。命令。真糟糕
我可以这样做吗,还是应该只保留两个分开的.Replace()
,然后检查案例?您试图解决的问题是如何解析时间字符串
这是一个棘手的问题,需要正确地编写几行代码。让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", "");
您试图解决的问题是,如何解析时间字符串
这是一个棘手的问题,需要正确地编写几行代码。让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", "");
试试这个(你可能需要调整格式,但应该可以)
试试这个(你可能需要调整格式,但应该可以)
如果((endTime-startTime).TotalHours>1)
,等等,这有什么不对?@itsme86我认为问题在于两者都是字符串What??DateTimePicker具有值属性。它是DateTime,DateTime具有分钟、小时、秒属性。无需解析任何内容如果您谈论的是WPF时间选择器,那么同样,有一个时间属性是TimeSpan,您可以使用它获取值或对另一个TimeSpan执行计算如果您不能使用DateTime控件,您仍然可以使用DateTime.parse()方法为你做所有艰苦的工作只要if((endTime-startTime).TotalHours>1)
等等有什么不对?@itsme86我相信问题在于两者都是字符串what??DateTimePicker具有值属性。它是DateTime,DateTime具有分钟、小时、秒属性。无需解析任何内容如果您谈论的是WPF时间选择器,那么同样,有一个时间属性是TimeSpan,您可以使用它获取值或对另一个TimeSpan执行计算如果您不能使用DateTime控件,您仍然可以使用DateTime.parse()方法为你做所有艰苦的工作,真的很欣赏答案,但它不是日期时间,我正在处理的是字符串。我只是想知道我是否可以在一个.Replace()方法中对两种不同的情况执行.Replace()。您注意到我是以字符串开头的吗?很抱歉,请重新阅读刚才的答案。我很快就会做,并检查它是否有效。真的很欣赏答案,但它不是日期时间,我正在处理的是字符串。我只是想知道我是否可以在一个.Replace()方法中对两种不同的情况执行.Replace()。您注意到我是以字符串开头的吗?很抱歉,请重新阅读刚才的答案。我会尽快检查它是否有效。
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