C# 将字符串(包含日期和时间)的值赋给两个不同的变量(一个用于日期,一个用于时间)

C# 将字符串(包含日期和时间)的值赋给两个不同的变量(一个用于日期,一个用于时间),c#,datetime,c#-4.0,c#-3.0,C#,Datetime,C# 4.0,C# 3.0,我有一个字符串(“CompletionDate”),其中包含值“2/28/2017 5:24:00 PM” 现在我有两个变量(EDate和ETime)。我想将日期指定为EDate(即2017年2月28日),时间指定为ETime(即下午5:24:00)。 如何从单个字符串中拆分日期和时间。 请帮忙。 我现在的做法是: string CompletionDate = string.Empty; string ProjectEDate = string.Empty; string ProjectETi

我有一个字符串(“CompletionDate”),其中包含值“2/28/2017 5:24:00 PM” 现在我有两个变量(EDate和ETime)。我想将日期指定为EDate(即2017年2月28日),时间指定为ETime(即下午5:24:00)。 如何从单个字符串中拆分日期和时间。 请帮忙。 我现在的做法是:

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();
但它抛出的异常是字符串的格式不正确。好心帮忙

DateTime.ParseExact(CompletionDate, "yyy-MM-dd", ...
日期格式字符串中缺少第四个“y”:

"yyyy-MM-dd"
    ^
   here
以及:
为什么要解析为
DateTime
,然后再次使用
ToString
转换为字符串?当你只想从一天中分割时间并且你知道确切的格式时,你就不能简单地使用
String.Split


@克里斯指出了你的一个问题,但你还有一个问题。您正在传递完整的日期时间字符串,并试图将其视为仅日期或时间,这是不正确的。相反,我建议您使用日期和时间解析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();

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

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"

编辑了我的问题谢谢你,谢尔盖。我的英语和格式技能不是很好:-)。但是学习;-)。
dt.ToString("yyyy-MM-dd")
"2017-03-29"
dt.ToString("HH:mm:ss")
"12:58:00"