android.text.format.DateFormat 和 java.text.DateFormat 有啥区别

     2023-02-25     219

关键词:

【中文标题】android.text.format.DateFormat 和 java.text.DateFormat 有啥区别【英文标题】:What is the difference between android.text.format.DateFormat and java.text.DateFormatandroid.text.format.DateFormat 和 java.text.DateFormat 有什么区别 【发布时间】:2012-01-21 16:56:05 【问题描述】:

我在android上阅读了一些关于格式化日期的帖子,如下所示:

How do you format date and time in Android?

人们建议使用android.text.format.DateFormat 而不是java.text.DateFormat

这里还提到了在android中将日期转换为字符串时的一个问题:

Android load timezone too long: Loaded time zone names for en_US

我想知道android.text.format.DateFormatjava.text.DateFormat 有什么区别?

【问题讨论】:

【参考方案1】:

据我所知,android.text.format.DateFormat 具有 java.text.DateFormat 的一些功能,java.text.SimpleDateFormat 的一些功能,以及它自己的一些额外功能。

最值得注意的是:

java SimpleDateFormat 允许构造任意非本地化格式。 Java DateFormat 允许通过其工厂方法为日期和时间构造三种本地化格式。 android DateFormat 允许上述大部分(任意格式和少量本地化格式),但也提供getBestDateTimePattern,它选择一个适合语言环境的格式字符串,其中包含使用适合语言环境的顺序和标点符号指定的元素。

所以,如果你需要一个本地化的日期/时间格式,而不是 java 的 DateFormat 类提供的三种格式,android DateFormat 类是解决方案。

不太重要,但额外的便利:android DateFormat 方法可以直接使用 Calendar 或 long 毫秒,而不需要 Date 对象。我总是更喜欢使用 Calendar 或 long over Date。此外,它正确地尊重日历对象的时区——而从日历中获取日期并将其传递给格式化程序会丢失时区信息。 (没有什么是您无法通过 java DateFormat 的 setCalendar 方法解决的,但不必这样做也很好。)

最后,也是最不重要的一点,Android DateFormat 的一些方法实际上并不构造格式化程序,你只是构造了一个格式化字符串。这个类的所有方法都是静态的。构造 DateFormat 的方法实际上构造了 java DateFormat!

【讨论】:

这应该是公认的答案。它至少试图回答问题,而不是狡猾地链接到在线文档。恕我直言,“阅读文档”不应该是一个公认的答案。 我很乐意删除我旧的、蹩脚的答案,但 SO 不允许您删除已接受的答案。【参考方案2】:

在这里进行一些自助怎么样?比较 API,阅读 JavaDocs 并亲自查看:

java.text.DateFormat android.text.format.DateFormat

【讨论】:

一位智者曾经告诉我:“给一个人一把火,他会在余下的夜晚保持温暖。让一个人着火,他会温暖他的余生。” 这是您早期的回答吗? 真正的引语是:“为人生火,他会温暖一天。让一个人着火,他会温暖他的余生。”