给定两个具有以下值的字符串:
31/05/2013 0:00:00
21:22
什么是将它们合并成一个
DateTime
数据类型的最有效方法,以获得以下结果:31/05/2013 21:22
第一个字符串中的时间部分 "0:00:00" 将被忽略,将使用第二个字符串中的 "time"。
使用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
并妥善处理。
+ (DateTime s, TimeSpan t)
。 - It'sNotALie.假设第一个字符串叫做one
,第二个字符串叫做two
,只需执行以下操作:
DateTime result = DateTime.Parse(one).Date + DateTime.Parse(two).TimeOfDay;
string strDate = "31/05/2013 0:00";
string strTime = "21:22";
strDate = strDate.Replace("0:00", strTime);
DateTime date = Convert.ToDateTime(strDate);
如果你刚开始只有字符串,你可以这样做:
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);
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;
string strDate = "31/05/2013 0:00:00";
string strTime = "21:22";
string strDateTime = strDate.Split(' ')[0] + " " + strTime;
var date = "31/05/2013 0:00:00";
var time = "21:22";
var dateTime = DateTime.Parse(date.Substring(0,11) + time);
Substring
。