我在ASP.Net中使用EPPlus创建一些Excel文件。一切都运作良好,除了在某些情况下,我需要显示一个短日期格式。使用EPPlus NumberFormat
,我可以应用短日期格式:
ws.Column(1).Style.Numberformat.Format = "yyyy-MM-dd";
这会在我的电子表格中输出日期2015-07-21
。虽然这是通用的,但如果可能,我更喜欢本地化(基于用户区域设置)格式。我可以使用以下命令检索用户区域设置的短日期格式:
String s = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
对于我来说,英国会返回dd/MM/yyyy
。其他使用EPPlus的作者参考Open Office XML ECMA-376 spec(50MB)来应用数字格式。页面1768显示了这个:
但是这里的m
都是小写的,在.Net中不是几个月而是几分钟,所以如果我这样做是错误/不相容的吗?
ws.Column(1).Style.Numberformat.Format = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
我没有资源来测试每种文化的日期格式,所以我想知道我的方法是否有问题?
或者,我应该根据规范强制使用ShortDatePattern ToLower
来忽略大写MM
吗? Excel(2013)本身使用小写自定义日期格式,所以我认为小写方法更好?我用两种格式进行了测试(使用大写/小写mm
),结果是一样的,但跨文化的事情让我感到担忧。
答案 0 :(得分:1)
我花了两天时间对此进行测试。似乎不应该使用DateTimeFormat.ShortDatePattern
。相反,无论客户端浏览器上的区域设置/语言设置如何,请使用此方法(Phoenix installation)进行短日期。
ws.Column(1).Style.Numberformat.Format = "yyyy-MM-dd"
这是因为浏览器无法保证与计算机的区域设置相匹配(Firefox和Chrome可以很容易地修改,默认情况下Chrome会安装为en-US),而Excel则使用计算机区域设置。
MS Excel非常智能,可以根据Windows语言设置读取日期值并将其转换为正确的格式。所以,就我而言,如果我的Windows语言是英语英语,我会自动在Excel中看到en-GB格式的日期。
如果我关闭电子表格,将Windows切换为挪威语,重新登录并重新打开相同的电子表格,日期会自动以相应的挪威格式显示。