从java.util.Date获取月份数的快速方法

时间:2017-11-28 22:56:20

标签: android date kotlin java.util.date

我的Android应用中有一个带有许多日期的recyclerview。为了对数据进行排序&在按月+年分组的项目之间插入分隔符,我使用以下语言:

private fun monthFromDate(date: Date): Int {
    val calendar = Calendar.getInstance()
    calendar.time = date
    return calendar.get(Calendar.MONTH)
}

private fun yearFromDate(date: Date): Int {
    val calendar = Calendar.getInstance()
    calendar.time = date
    return calendar.get(Calendar.YEAR)
}

我认为它的坏主意总是调用Calendar.getInstance()。我也不想引入一个局部变量。 (顺便说一句,像date.month date.year这样的所有方法已弃用

问题: 我有两个util.java.Date实例。如果月和月都让他们平等一年是平等的。如何在快速和快速中实现这种乐趣?最佳方式?

2 个答案:

答案 0 :(得分:2)

Date.getMonth()虽然弃用很好。 Java保持向后兼容性。

如果使用Java 8,您可以对您的版本Calendar.getInstance().get(Calendar.MONTH)与新LocalDate.ofEpochDay(new Date().getTime()).getMonthValue()

进行一些基准测试

答案 1 :(得分:1)

目前还不是很清楚,为什么Calendar.getInstance()是次优的。但是,根据您的要求,如何编码如下:

private fun getYearMonth(date: Date): Int {
    val calendar = Calendar.getInstance()
    calendar.time = date
    return calendar.get(Calendar.YEAR) * 100 + calendar.get(Calendar.MONTH) 
}

允许您在单个整数中访问yearMonth,例如201711