我有一个在 C#.Net 和 Java 上运行的应用程序。两个完全独立但相同的代码库。我遇到的问题是格式化日期和数字。
例如:运行.Net变体的用户正在输入日期和格式字符串。 1986年4月26日的格式为1986-04-26。实际日期以及格式字符串将序列化为XML文件。稍后,运行Java变体的另一个用户打开所述XML文件并查看日期。我希望它们看起来一样。
这里最好的方法是什么? Java和.Nets格式字符串之间似乎没有一对一的映射。我是否应该将可能的格式限制为选择,我知道我可以在.Net和Java中完全代表?
答案 0 :(得分:3)
我强烈建议您不要自己编写任何解析器和编写器,而是依赖现有的库和标准。由于您要在XML文件中写入/读取,我强烈建议您使用该标准作为日期时间:ISO 8601。
您可以使用Joda Time,这是一个支持ISO 8601的库。格式weekDateTimeNoMillis
(请参阅doc)提供了您想要保留最终可能性所需的一切也存储时间:
date
(请参阅doc)可能是正确的,如果您不想存储时间信息。它的格式为yyyy-MM-dd
(注意:如果执行字符串排序算法,它将按日期对其进行正确排序)
.net框架已经提供了ISO 8601编写器和解析器:DateTime.UtcNow.ToString("s")
将写出正确的格式yyyy-MM-ddTHH:mm:ss
。
你看:你只需要决定一种格式(只有日期,日期时间或带有时区的日期时间),并使用两种语言中的相应工具,一切都会好起来的。如果你没有准确指定格式,可能会发生奇怪的事情:你不知道它的格式就无法识别10-09-08
,是不是:
您/解析器无法知道。
答案 1 :(得分:2)
使用标准格式。由于XML本身定义了日期格式,因此您就是这样。有关详细信息,请参阅http://www.w3schools.com/Schema/schema_dtypes_date.asp。日期看起来像2010-12-24,日期时间如2010-12-24T23:59。
由于Java和.NET都有自己的日期格式类,因此您应该决定使用它们。没有“默认”日期格式,但是,如果使用Java DateFormat类,则将使用检测到的平台区域设置打印日期。而且因为已知它是可变的,所以无论如何你必须自己明确这种格式。