字符串C#

时间:2018-12-05 15:06:12

标签: c#

这个问题更多的是开放式的,什么是最佳实践,或者您认为什么是最佳实践方案?我试图获得两次,将它们的数字分开,以便可以将它们放入DateTime值中。

我认为是最快,最干净的示例,但是我不确定...

string a = "11:50-12:30";
a = Regex.Replace(a, @"[^\d]", ""); //output 11501230
string time_1 = a.Substring(0, 3);
string time_2 = a.Substring(4, 7);
// DO SOME parsing of strings to ints
DateTime Start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, //enter some separate ints here)

但是也许我可以做些类似的事情?而且这不能慢很多吗?也许更快?

string a = "11:50-12:30"
string a_1 = a.substring(0,4);
string b = DateTime.Today.Year.toString() + DateTime.Today.Month.toString() + DateTime.Today.Day.toString() + "11:50-12:30";
DateTime mytime = DateTime.ParseExact(a_1, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

2 个答案:

答案 0 :(得分:1)

与效率无关,但:由于您主要关心时间,为什么不将每个部分解析为System.TimeSpan,然后可以将其添加到DateTime实例中(使用Add ),以使其代表时间。

string a = "11:50-12:30";
var parts = a.Split('-');
var time_1 = TimeSpan.Parse(parts[0]);
var time_2 = TimeSpan.Parse(parts[1]);
var start = DateTime.Today.Add(time_1);
var end = DateTime.Today.Add(time_2);

我省略了对Split调用的错误检查,以检查是否有2个部分以及建议在Parse上进行检查。您也可以使用TryParse,但您会明白。

答案 1 :(得分:1)

您可以使用System.Diagnostics中的Stopwatch手动测试性能

    string a = "11:50-12:30";

    Stopwatch watch = new Stopwatch();
    watch.Start();
    DateTime start = DateTime.Today.Add(DateTime.ParseExact(a.Split('-').First(), "hh:mm", CultureInfo.InvariantCulture).TimeOfDay);
    DateTime end = DateTime.Today.Add(DateTime.ParseExact(a.Split('-').Last(), "hh:mm", CultureInfo.InvariantCulture).TimeOfDay);
    watch.Stop();
    Console.WriteLine(watch.Elapsed.ToString());
    Console.WriteLine(start.ToString());
    Console.WriteLine(end.ToString());