将克罗地亚语日期字符串解析为DateTime

时间:2015-01-23 09:30:22

标签: c# string datetime culture

我有来自WebService "1.4.2013. 0:00:00"的以下字符串。 我想从DateTime获取string个对象。 到目前为止我尝试了什么:

string d = "1.4.2013. 00:00:00";
 DateTime parsed = DateTime.ParseExact(d, "d",CultureInfo.CreateSpecificCulture("hr-HR"));

DateTime parsed = DateTime.ParseExact(d, "d",new CultureInfo("hr-HR"));
DateTime parsed = DateTime.ParseExact(d, "d", CultureInfo.InvariantCulture);

它告诉我

  

字符串无法识别为有效的dateTime字符串。

我想在没有字符串解析的情况下解决这个问题,例如:在年后删除点。

3 个答案:

答案 0 :(得分:7)

The "d" standard format specifier使用提供的文化ShortDatePattern。由于您使用DateTime.ParseExact,格式和字符串应与完全匹配

hr-HR文化的ShortDatePattern模式为d.M.yyyy.,这显然与您的字符串不匹配。它也不与InvariantCulture匹配。

但是,此格式是hr-HR文化的标准日期和时间格式,因此您可以直接使用DateTime.Parse;

string d = "1.4.2013. 00:00:00";
DateTime parsed = DateTime.Parse(d, CultureInfo.GetCultureInfo("hr-HR"));
// 01/04/2013 00:00:00

您的字符串与hr-HR种文化的The "G" standard format specifier匹配,该文化基于ShortDatePatternLongTimePattern属性d.M.yyyy. H:mm:ss的组合。

答案 1 :(得分:1)

您应该使用G作为格式说明符。 “G”标准格式说明符表示短日期(“d”)和长时间(“T”)模式的组合,以空格分隔。

更多信息here

string d = "1.4.2013. 00:00:00";
DateTime parsed = DateTime.ParseExact(d, "G",new CultureInfo("hr-HR"));

答案 2 :(得分:1)

以下内容应该有效:

string date = "1.4.2013. 00:00:00";
var ci = CultureInfo.CreateSpecificCulture("hr-HR");

DateTime parsed = DateTime.Parse(date, ci);

正如Soner所说,你试图使用短日期模式,它不包含任何时间信息,因此ParseExact失败。使用Parse可让方法找出要使用的格式。

如果您想使用ParseExact(例如performance reasons),您可以使用以下(等效)语句之一:

DateTime parsed = DateTime.ParseExact(date, "d.M.yyyy. HH:mm:ss", ci);

DateTime parsed = DateTime.ParseExact(date, "G", ci);