我有一个可以在C#.Net和Java上运行的应用程序。两个完全独立但相同的代码库。我遇到的问题是格式化日期和数字。

例如:运行.Net变体的用户正在输入日期和格式字符串。 1986年4月26日的格式为1986-04-26。实际日期以及格式字符串将序列化为XML文件。后来,另一个运行Java变体的用户打开了该XML文件并查看了日期。我希望他们看起来一样。

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

最佳答案

我强烈建议您不要自己编写任何解析器和编写器,而要依靠现有的库和标准。当您要写入XML文件或从XML文件读取数据时,我强烈建议在其中使用日期时间标准:ISO 8601

Java:

您可以使用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日
...?


您/解析器只是不知道。

07-24 18:35
查看更多