【问题标题】:Is Excel/EPPlus number format compatible with DateTimeFormat.ShortDatePattern?Excel/EPPlus 数字格式是否与 DateTimeFormat.ShortDatePattern 兼容?
【发布时间】:2016-09-27 16:45:51
【问题描述】:

我正在使用 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),结果是一样的,但是跨文化的事情让我很担心。

【问题讨论】:

    标签: asp.net .net excel excel-2013 epplus


    【解决方案1】:

    我花了两天时间对此进行测试。似乎不应该使用DateTimeFormat.ShortDatePattern。相反,无论客户端浏览器上的区域设置/语言设置如何,都可以使用这种方法 (ISO8601) 来处理短日期。

    ws.Column(1).Style.Numberformat.Format = "yyyy-MM-dd"
    

    这是因为浏览器不能保证匹配计算机的区域设置(Firefox 和 Chrome 可以很容易地修改,Chrome 默认安装为 en-US),并且 Excel 使用计算机的区域设置。

    MS Excel 足够聪明,可以读取日期值并根据 Windows 语言设置将它们转换为正确的格式。因此,就我而言,如果我的 Windows 语言是英国英语,我会自动在 Excel 中看到 en-GB 格式的日期。

    如果我随后关闭电子表格,将 Windows 切换到挪威语,重新登录并重新打开同一个电子表格,日期会自动以相应的挪威语格式显示。

    【讨论】:

    • 感谢您通过额外的努力回答。反对者应该解释他的理由。至少我可以扭转颓势。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多