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

Parse Croatian Date string into DateTime

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

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);

它告诉我

string is not recognized as valid dateTime string.

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

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

但是hr-HR文化ShortDatePattern pattern is d.M.yyyy. and this clearly doesn't match with your string. It doesn't match with InvariantCulture也一样。

不过,这种格式是hr-HR文化的标准日期和时间格式,所以你可以直接使用DateTime.Parse like;

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

您的字符串与 The "G" standard format specifier of hr-HR culture which based on combination of ShortDatePattern and LongTimePattern 属性匹配 d.M.yyyy. H:mm:ss

您应该使用 G 作为格式说明符。 "G" 标准格式说明符表示短日期 ("d") 和长时间 ("T") 模式的组合,由 space.

分隔

更多信息here

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

以下应该有效:

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);