将时间和日期字符串组合在一起以创建单个DateTime对象

时间:2017-01-10 23:01:22

标签: c# datetime

我发现了很多关于将时间字符串转换为DateTime对象以及将日期字符串转换为DateTime对象的精彩解决方案。我没有找到的是同时做到这两点的事情。

这两个字符串的一个例子是:

1/10/2017

12:00 AM

这是我的尝试。

C#

var start = model.PublishDate;
var time = model.PublishTime;

if(time.Length == 7)
{
    time = "0" + time;
}
var dateTimeString = start + " " + time;

dbSectionProps.PublishDate = DateTime.ParseExact(dateTimeString, 
       new string[] { "M/d/yyyy hh:mm:ss tt", "MM/dd/yyyy hh:mm:ss tt", "M/dd/yyyy hh:mm:ss tt", "MM/d/yyyy hh:mm:ss tt" }, CultureInfo.InvariantCulture, DateTimeStyles.None);

然而它会抛出错误。任何建议都会很精彩。谢谢!

2 个答案:

答案 0 :(得分:3)

修复两个字符串之间缺少的空格后,还有另一个问题。生成的字符串不包含PM或AM规范,而提供给DateTime.ParseExact的格式字符串需要存在这些字符。

您可以从格式中删除此要求

string[] formats = new string[] 
{
    "M/d/yyyy hh:mm:ss", 
    "MM/dd/yyyy hh:mm:ss", 
    "M/dd/yyyy hh:mm:ss", 
    "MM/d/yyyy hh:mm:ss"
};
dbSectionProps.PublishDate = DateTime.ParseExact(dateTimeString, 
     formats, CultureInfo.InvarianCulture, DateTimeStyles.None);

但如果您的时间部分包含指定为0-23的小时数,那么这将不起作用the format hh cannot work with values bigger than 12。所以你需要将hh改为HH

修改
看到你上次编辑后,我认为字符串的正确格式

1/10/2017 12:00 AM 

将没有秒说明符和tt再次

string[] formats = new string[] 
{
    "M/d/yyyy hh:mm tt", 
    "MM/dd/yyyy hh:mm tt", 
    "M/dd/yyyy hh:mm tt", 
    "MM/d/yyyy hh:mm tt"
};

答案 1 :(得分:2)

也许让框架为您完成工作。样品:

string dateString = "1/12/2017";
string timeString = "10:55:00 pm";

var d = DateTime.Parse(dateString).Date;
var t = DateTime.Parse(timeString).TimeOfDay;
DateTime sum = d.Add(t);

Console.WriteLine(String.Format("{0}\r\n{1}\r\n{2:yyyy-MM-dd HH:mm:ss}", d, t, sum));