我需要的日期和时间函数集非常基本。
- 表示日期/时间的对象(方便函数调用)。
- y、m、d、h、m、s 之间的转换函数。
- 格式/解析函数与仅限数字的本地化字符串表示形式。例如 dd/mm/yyyy、yyyy-mm-dd、mm.dd.yyyy 或本地预期的任何顺序和分隔符。
- 获取当前本地日期和时间的系统函数(不需要时区)。
- 与 DatePicker 小部件兼容。
- 线程安全。可用于 UI 和工作线程 (NDK) 的静态函数。
到目前为止我发现:
Calendar
和GregorianCalendar
可以进行转换,但它们使用起来很笨重,而且它们不是线程安全的。SimpleDateFormat
可以进行格式化,只要我能弄清楚要输入哪个神奇的字符串即可!默认值不是数字。- Time 有一组更好的转换函数,但没有日期/时间对象,而且解析/格式函数只是间接记录。而且它闻起来更像 Unix 而不是 Java。
那么我是否找到一种方法来修复线程安全并尝试说服 SimpleDateFormat
给我我需要的东西?还是我放弃并跳槽到 Time
?还是我错过了什么?
需要说明的是,这不是图书馆推荐或购物 list 的请求。这是关于如何使用给定的 Android API 实现一组特定功能的帮助请求。我正在寻找使用这些库来指出一条穿越泥沼的路径的专家。我希望写得很好的答案能让其他读者也为这部分 Android 苦苦挣扎。
最佳答案
我个人认为 Joda-Time能够处理日期和时间所需的几乎所有内容。因为它只是一个 .jar,所以应该可以导入。
以下是如何使用它,针对您具体提出的问题:
- 表示日期/时间的对象 -
DateTime
表示不可变,MutableDateTime
表示您需要应用转换的对象。 - 这些对象有很多转换方法,见Joda-Time API for AbstractDateTime例如,Joda 的所有类都扩展了
AbstractDateTime
- 您可以使用
String convertedToString = new DateTime().toString("yyyy-MM-dd")
将其设为 2014-05-05。要扭转这一局面,请使用此 API:DateTimeFormatter parseDateTime(someStringThatRepresentsADate) DateTime now = new DateTime()
现在给你一个 DateTime 对象- 您可以通过执行类似
DateTime fromCalendar = new DateTime(myCalendarObject)
的操作从其他几个类(例如Calendar
)获取DateTime
对象 - 参见 The FAQ for Joda on multi-threading
为了将 Joda 导入到您的 Android 项目中,假设您使用的是 Android Studio 和 Gradle,请参阅以下答案:Android Studio: Add jar as library?
关于java - 哪些 Android API 用于简单的日期和时间函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23455361/