代码之家  ›  专栏  ›  技术社区  ›  Mizipzor

.NET和Java中的日期格式字符串

  •  2
  • Mizipzor  · 技术社区  · 14 年前

    我有一个应用程序可以在两个应用程序上运行 C.net 爪哇 . 两个完全独立但相同的代码基。我的问题是格式化日期和数字。

    例如:运行.NET变量的用户正在输入日期和格式字符串。1986年4月26日的格式为1986-04-26。实际日期以及格式字符串被序列化为XML文件。稍后运行Java变体的另一个用户打开所说的XML文件并查看日期。我想让它们看起来一样。

    这里最好的方法是什么?Java和.NET格式字符串之间似乎没有一对一的映射。我是否应该将可能的格式限制为一个选择,我知道我可以完全代表.NET和Java?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Philip Daubmeier    14 年前

    我强烈建议不要自己编写任何解析器和编写器,而是依赖现有的库和标准。由于您想写入/读取XML文件,我强烈建议在该文件中使用日期时间标准: ISO 8601 .

    爪哇:

    你可以使用 Joda Time ,支持ISO 8601的库。格式 weekDateTimeNoMillis (见 doc )如果您希望保留最终存储时间的可能性,也可以提供所需的一切:

    • 日期
    • 时间
    • 时区(对于UTC为“Z”,对于其他时区为+/-hh:mm)。

    date (见 doc )如果你不想储存时间信息,也许是正确的。它的格式是 yyyy-MM-dd (注意:如果执行字符串排序算法,它将按日期正确排序)

    C:

    .NET框架已经提供了一个ISO 8601编写器和分析器: DateTime.UtcNow.ToString("s") 将写入正确的格式 yyyy-MM-ddTHH:mm:ss .

    你看:你只需要决定一种格式(只有日期、日期时间或带时区的日期时间),使用两种语言各自的工具,一切都会好起来的。如果您不准确地指定格式,可能会发生奇怪的事情:您无法识别 10-09-08 不知道它的格式,它是:

    • 2010年8月9日
    • 2010年9月8日
    • 2008年9月10日
    • 2008年10月9日
    • …?

    你/解析器只是不知道。

        2
  •  2
  •   Daniel    14 年前

    使用标准格式。因为XML本身定义了一个日期格式,所以您就是这样。见 http://www.w3schools.com/Schema/schema_dtypes_date.asp 更多信息。日期看起来像2010-12-24,日期时间像2010-12-24t23:59。

    由于Java和.NET都有自己的日期格式类,所以只需要使用一个。没有“默认”日期格式,但是,如果使用JavaDeaFrand类,则将使用检测到的平台区域设置打印日期。既然知道这是可以更改的,无论如何你必须自己指定格式。