我需要的日期和时间函数集非常基础。


代表日期/时间的对象(为方便函数调用)。
y,m,d,h,m,s之间的转换函数。
格式化/解析函数与仅数字本地化字符串表示之间的格式/解析函数。例如dd / mm / yyyy,yyyy-mm-dd,mm.dd.yyyy或任何本地预期的顺序和分隔符。
获取当前本地日期和时间的系统功能(不需要时区)。
与DatePicker小部件兼容。
线程安全。 UI和辅助(NDK)线程均可使用的静态函数。


到目前为止,我发现:


CalendarGregorianCalendar可以进行转换,但是它们使用起来很笨拙,而且不是线程安全的。
SimpleDateFormat可以进行格式化,如果我只能弄清楚哪个魔术字符串可以喂它呢!默认值不是数字。
时间具有一组更好的转换函数,但没有日期/时间对象,并且解析/格式函数仅间接记录在案。而且它闻起来更像Unix,而不是Java。


那么,我是否找到一种方法来修复线程安全并尝试说服SimpleDateFormat给我我所需要的东西?还是我放弃并跳到Time?还是我错过了什么?



需要明确的是,这不是要求图书馆推荐或购物清单。要求提供有关如何使用给定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的操作从其他几个类(例如Calendar)中获得一个DateTime fromCalendar = new DateTime(myCalendarObject)对象。
The FAQ for Joda on multi-threading


假设您使用的是Android Studio和Gradle,为了将Joda导入您的Android项目,请参见以下答案:Android Studio: Add jar as library?

09-30 15:41
查看更多