作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
日期在日志中记录如下:
08 岁。 2017 00:00:06,694
我一直在使用 Linqpad 尝试使用乌克兰文化提出一个有效的日期时间掩码,这就是我尝试过的:
var dateString = "08 груд. 2017 00:00:06,694";
DateTime date;
DateTime.TryParseExact(
dateString,
"dd MMMM. yyyy HH:mm:ss,fff",
new CultureInfo("uk-UA"),
DateTimeStyles.None,
out date);
Console.WriteLine(date);
这不起作用,此脚本的输出是:
1/1/0001 凌晨 12:00:00
同样的方法对我来说对其他几种语言也很有效,所以我对这里发生的事情感到困惑。据我所知,月份没有被正确解析。我试着用“hrud”代替。对于月份值(来自:https://www.loc.gov/aba/pcc/conser/conserhold/Mosabbr.html),但这也不起作用。
最佳答案
MMMM
月份的格式说明符表示“完整的月份名称”。您可以通过以下方式查看给定文化的完整月份名称:
var culture = new CultureInfo("uk-UA");
var monthNames = culture.DateTimeFormat.MonthNames;
对于这种文化,十二月的全称是“грудень”,而不是“груд”。您可能会考虑使用“短月份名称”格式说明符 MMM
。您可以像这样查看给定文化的月份的“简称”:
var culture = new CultureInfo("uk-UA");
var monthNames = culture.DateTimeFormat.AbbreviatedMonthNames;
但是您会看到 12 月的简称是“гру”而不是“груд”。因此,要使用您的文化的默认月份名称解析您的字符串,您需要执行以下操作:
var dateString = "08 грудень 2017 00:00:06,694";
DateTime date;
DateTime.TryParseExact(dateString, @"dd MMMM yyyy HH:mm:ss,fff", new CultureInfo("uk-UA"), DateTimeStyles.None, out date);
或者
var dateString = "08 гру. 2017 00:00:06,694";
DateTime date;
DateTime.TryParseExact(dateString, @"dd MMM. yyyy HH:mm:ss,fff", new CultureInfo("uk-UA"), DateTimeStyles.None, out date);
另一种选择是根据您的情况调整文化月份名称,就像这样(请注意,它不会修改全局文化设置,只会修改此特定 CultureInfo
实例的月份名称,所以这样做没有危险):
var dateString = "08 груд. 2017 00:00:06,694";
DateTime date;
var culture = new CultureInfo("uk-UA");
var defaultShortNames = culture.DateTimeFormat.AbbreviatedMonthNames;
var defaultShortGenitiveNames = culture.DateTimeFormat.AbbreviatedMonthGenitiveNames;
// obviously modify all month names as necessary
defaultShortNames[11] = "Груд";
defaultShortGenitiveNames[11] = "груд";
culture.DateTimeFormat.AbbreviatedMonthNames = defaultShortNames;
culture.DateTimeFormat.AbbreviatedMonthGenitiveNames = defaultShortGenitiveNames;
// store this modified culture and reuse when necessary
// that MMM format consists of 3 letters is irrelevant - it will still
// work fine with abbreviated month names of 4 characters or more
DateTime.TryParseExact(dateString, @"dd MMM. yyyy HH:mm:ss,fff", culture, DateTimeStyles.None, out date);
关于c# - 我正在尝试从日志文件中解析乌克兰日期/时间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48064660/
我是一名优秀的程序员,十分优秀!