3

给定两个具有以下值的字符串:

31/05/2013 0:00:00
21:22

将它们加入DateTime数据类型的最有效方法是什么:

31/05/2013 21:22

第一个字符串“0:00:00”的时间部分被忽略,有利于使用第二个字符串中的“时间”。

4

8 回答 8

8

使用一个TimeSpan对象,DateTime.Add(yourTimeSpan);例如

DateTime dt = new DateTime(2013,05,31);
var dts = dt.Add(new TimeSpan(0, 21, 22, 0, 0));

稍微扩展答案,您可以先解析日期和时间,例如

DateTime dt = DateTime.Parse("05/31/2013 0:00:00");
TimeSpan ts = TimeSpan.Parse("21:22");
var dts = dt.Add(ts);

...请记住,我不是在检查错误的日期/时间值。如果您不确定这些值是否是真实日期/时间,请正确使用DateTime.TryParse和处理。

于 2013-05-31T19:32:54.297 回答
1

正如@George 所说,将第一个值解析为 DateTime,然后将另一个值解析为 TimeSpan,然后将 TimeSpan 添加到第一个解析值。

另一种选择是获取第一个值的前 10 个字符的子字符串,并将其与具有第二个值的空格连接起来,并将其解析为 DateTime。

于 2013-05-31T19:35:57.037 回答
0

假设第一个字符串被调用one,第二个被调用two,只需这样做:

DateTime result = DateTime.Parse(one).Date + DateTime.Parse(two).TimeOfDay;
于 2013-05-31T19:33:27.360 回答
0
string strDate = "31/05/2013 0:00";
string strTime = "21:22";
strDate = strDate.Replace("0:00", strTime);
DateTime date = Convert.ToDateTime(strDate);
于 2013-05-31T19:34:21.047 回答
0

如果你刚开始使用字符串,你可以这样做:

var dateString = "31/05/2013 00:00";
var timeString = "21:22";
var dateTimeString = dateString.Substring(0, 11) + timeString;
var output = DateTime.ParseExact(dateTimeString, "dd/MM/yyyy HH:mm", null);

假设您确定这种格式不会改变(这是一个危险的假设,可以肯定),这将起作用。否则,您必须分别解析日期和时间字符串,并按照其他人的建议使用传统的日期操作。例如:

var ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
var dateString = "31/05/2013 00:00";
var timeString = "21:22";
var output = DateTime.Parse(dateString, ci) + TimeSpan.Parse(timeString, ci);
于 2013-05-31T19:37:06.717 回答
0
  DateTime date = DateTime.ParseExact("31/05/2013 0:00:00", "dd/MM/yyyy h:mm:ss", CultureInfo.InvariantCulture);
  TimeSpan span = TimeSpan.ParseExact("21:22", "t", CultureInfo.InvariantCulture);
  DateTime result = date + span;
于 2013-05-31T19:39:21.780 回答
0

如果您真的只处理strings,那么:

string strDate = "31/05/2013 0:00:00";
string strTime = "21:22";
string strDateTime = strDate.Split(' ')[0] + " " + strTime;
于 2013-05-31T19:44:27.000 回答
0

如果您可以安全地假设您得到 2 位数的月份和日期、4 位数的年份和日期后的空格:

var date = "31/05/2013 0:00:00";
var time = "21:22";
var dateTime = DateTime.Parse(date.Substring(0,11) + time);

如果关于输入格式的假设不可靠,您可以使用正则表达式来提取日期而不是Substring.

于 2013-05-31T19:46:13.333 回答