c# - 在 C# 中解析西班牙语日期在桌面和服务器上的工作方式不同
问题描述
尝试使用文化解析日期时,es-ES
我在本地得到的行为与在构建服务器上运行相同代码和使用 dotnetfiddle 时不同。
我的突出这个问题的测试程序如下:
public static void Main(string[] args)
{
var when = new DateTime(2018, 01, 19);
CultureInfo dateCulture = new CultureInfo("es-ES");
var headerDate = "19-ene-2018";
bool success;
DateTime result;
Console.WriteLine(when.ToString("dd-MMM-yyyy", dateCulture));
success = DateTime.TryParseExact(
headerDate,
"dd-MMM-yyyy",
dateCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
out result);
Console.WriteLine(success);
Console.WriteLine(result);
}
在本地这会产生:
19-ene-2018
True
1/19/2018 12:00:00 AM
而在 dotnetfiddle 上它会产生:
19-ene.-2018
False
1/1/0001 12:00:00 AM
第一个令人惊讶的事情是,使用完全相同的日期格式,服务器将月份格式化为ene.
与本地一样ene
(注意额外的句点)。这就是我认为导致实际日期无法解析的原因。
在放弃并使用正则表达式或其他同样可怕的解决方案之前,是否有人对为什么会发生这种情况有任何想法?这是服务器和桌面框架安装之间的区别吗?
解决方案
虽然我无法解释为什么“es-ES”文化可以有不同的AbbreviatedMonthNames
. 这是一个解决方案:
根据是否预期该期间,您可以使用以下内容进行修改AbbreviatedMonthNames
:
CultureInfo dateCulture = new CultureInfo("es-ES");
dateCulture.DateTimeFormat.AbbreviatedMonthNames = dateCulture.DateTimeFormat.AbbreviatedMonthNames
// uncomment one of the two lines below
//.Select(x => x.TrimEnd('.'))
//.Select(x => !string.IsNullOrEmpty(x) && x.EndsWith(".") ? x : x + ".")
.ToArray();
推荐阅读
- python - 按照字典中列出的条件填充新列
- reactjs - 材料表设计搞砸了如何修复
- flutter - 无法编译:每当我将任何 video_player 依赖项添加到 Flutter 时,“任务执行失败:app:processDebugMainManifest”
- mysql - MySQL 错误代码 1265:列的数据被截断
- javascript - 我可以在单击输入类型 = 搜索时向按钮添加事件吗?
- python - 无法获取验证令牌/更多问题 - Roblox 方面的问题?
- python - 在 Keras 中定义自定义渐变时出错
- php - 是否有任何 PHP DOM-crawler 方法可以单击网页的元素?
- windows - 如何处理带有空格的文件夹路径并使用条件编码?
- sql - 术语“行集”和“行”在 SQL 词汇表中是否具有不同的含义?