将字符串的值(包含日期和时间)分配给两个不同的变量(一个用于Date,一个用于Time)

时间:2017-01-31 12:57:53

标签: c# datetime c#-4.0 c#-3.0

我有一个字符串(“CompletionDate”),其中包含值“2/28/2017 5:24:00 PM” 现在我有2个变量(EDate和ETime)。我想将日期分配给EDate(即2/28/2017)和Time to ETime(即5:24:00 PM)。 如何从单个字符串中拆分日期和时间。 请帮助。 我现在的方法是:

string CompletionDate = string.Empty;
string ProjectEDate = string.Empty;
string ProjectETime = string.Empty;
CompletionDate = "2017-03-29 12:58:00";
DateTime dt = DateTime.ParseExact(CompletionDate, "yyyy-MM-dd", CultureInfo.CreateSpecificCulture("en-us"));
DateTime dt1 = DateTime.ParseExact(CompletionDate, "HH:mm:ss", CultureInfo.CreateSpecificCulture("en-us"));
var ProjectEDate = dt.ToString();
var ProjectETime = dt1.ToString();

但它抛出的异常是字符串格式不正确。请帮助

4 个答案:

答案 0 :(得分:4)

@Chris指出了你的一个问题,但你还有一个问题。您正在传递完整的日期时间字符串并尝试将其视为日期或时间,但事实并非如此。相反,我建议您使用日期和时间解析DateTime对象,然后从解析的对象中获取所需的任何内容:

CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-us");
DateTime dt = DateTime.ParseExact(CompletionDate, "yyyy-MM-dd HH:mm:ss", enUS);
var ProjectEDate = dt.Date.ToString();
var ProjectETime = dt.TimeOfDay.ToString();

答案 1 :(得分:3)

DateTime.ParseExact(CompletionDate, "yyy-MM-dd", ...

您在日期格式字符串中缺少第4个“y”:

"yyyy-MM-dd"
    ^
   here

和: String was not recognized as a valid DateTime " format dd/MM/yyyy"

答案 2 :(得分:3)

您需要指定与解析方法的输入字符串相同的完整格式。

DateTime dt = DateTime.ParseExact(CompletionDate, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CreateSpecificCulture("en-us"));

要获得结果,您可以在DateTime中默认使用以下方法。

dt.ToShortTimeString()
"12:58 PM"
dt.ToLongTimeString()
"12:58:00 PM"
dt.ToLongDateString()
"Wednesday, March 29, 2017"
dt.ToShortDateString()
"3/29/2017"

或者您可以指定ToString方法的格式。

dt.ToString("yyyy-MM-dd")
"2017-03-29"
dt.ToString("HH:mm:ss")
"12:58:00"

答案 3 :(得分:2)

为什么要解析为DateTime,然后再次使用ToString转换为字符串?当你想要的只是分开时间和你知道确切的格式时,你不能简单地使用String.Split吗?

var CompletionDate = "2017-03-29 12:58:00";
var tmp = CompletionDate.Split(' ');

var ProjectEDate = tmp[0];
var ProjectETime = tmp[1];