gpt4 book ai didi

c# - 将日期从西类牙语转换为英语

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:18 25 4
gpt4 key购买 nike

我的应用程序的当前文化设置为西类牙语,但我需要将我的日期转换为英语才能执行数据库操作。

当前日期以这种格式出现:“Dic 13, 2017”

我需要将其转换为:“2017 年 12 月 13 日”

到目前为止我尝试了什么

var input = objDMSampleA.RequestDateFrom;
var format = "MMM dd, yyyy";

var dt = DateTime.ParseExact(input, format, new CultureInfo("es-ES"));

var result = dt.ToString(format, new CultureInfo("en-US"));

但是 ParseExact 给出了错误

String was not recognized as a valid DateTime.

最佳答案

给定文化的“短”月份名称存储在 CultureInfo.DateTimeFormat.AbbreviatedMonthNames 中。对于 es-ES 文化,这些名称末尾可能带有点(例如:“dic.”而不是“dic”)。因此,解析您的字符串失败 - “Dic”没有那个点。

要解决这个问题,一种方法是修改这些名称:

var esCulture = new CultureInfo("es-ES");
var monthNames = esCulture.DateTimeFormat.AbbreviatedMonthNames;
for (int i = 0; i < monthNames.Length; i++) {
monthNames[i] = monthNames[i].TrimEnd('.');
}
esCulture.DateTimeFormat.AbbreviatedMonthNames = monthNames;
monthNames = esCulture.DateTimeFormat.AbbreviatedMonthGenitiveNames;
for (int i = 0; i < monthNames.Length; i++)
{
monthNames[i] = monthNames[i].TrimEnd('.');
}
esCulture.DateTimeFormat.AbbreviatedMonthGenitiveNames = monthNames;

然后您的代码将按预期工作:

var input = "Dic 13, 2017";
var format = "MMM dd, yyyy";
var dt = DateTime.ParseExact(input, format, esCulture);
var result = dt.ToString(format, new CultureInfo("en-US"));

最好将修改后的文化存储在某个静态字段中并重用它,而不是创建它并每次都更改。

如果你想修改所有线程的当前文化,使用

CultureInfo.DefaultThreadCurrentCulture = esCulture;

虽然我不建议这样做。

关于c# - 将日期从西类牙语转换为英语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49249213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com