c# - DateTimeOffset.TryParse 在 Linux 中失败
问题描述
我正在尝试使用 解析字符串DateTimeOffset.TryParse
,它在 Windows 上成功但在 Linux 上失败:
DateTimeOffset.TryParse("29.10.2020", out var parsedDate);
我也尝试使用解析它
DateTimeOffset.TryParseExact("29.10.2020", "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate)
但返回的 bool 仍然是false
并且默认值0001-01-01T00:00:00.0000000+00:00
被分配为parsedDate
.
有什么办法可以在 Linux 上做到这一点?
解决方案
这种TryParse
使用当前文化(CultureInfo.CurrentCulture
)的重载,因此您的开发机器(Windows)和您的 linux 机器之间的文化是不同的。例如:
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en");
DateTimeOffset parsedDate;
bool res = DateTimeOffset.TryParse("29.10.2020", out parsedDate);
Console.WriteLine(res); // false
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("ru");
res = DateTimeOffset.TryParse("29.10.2020", out parsedDate);
Console.WriteLine(res); // true
因此,您需要使用重载来接受IFormatProvider
并在那里传递提供程序,这对于您存储日期的格式是有意义的。例如:
var cultureOfMyDates = CultureInfo.GetCultureInfo("ru");
res = DateTimeOffset.TryParse("29.10.2020", cultureOfMyDates, DateTimeStyles.None, out parsedDate);
或使用TryParseExact
(您的样品DateTimeOffset.TryParseExact("29.10.2020", "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate)
对我来说很好)
推荐阅读
- c# - Autofac.Core.DependencyResolutionException: '激活时抛出异常
- bit - 为什么我的代码在前面添加零时会给出不同的输出?
- bash - 如何使用我得到的参数执行程序?
- php - 如何用 php 隐藏 html 元素?
- php - 检查 URL 中是否只有特定参数
- javascript - 使用 componentDidMount() React 进行 api 调用
- elasticsearch - Elasticsearch“max_ngram_diff”适用于“edge_ngram”但不适用于“ngram_tokenizer”
- google-apps-script - 如何使用应用程序脚本按总计中的“成本总和”排序
- javascript - “react-native-lanscan”抛出异常!undefined 不是对象(评估“this.RNLAN_Scan.scan”)?
- python - TypeError:浮点数不可下标