转换月份名称时发生java Android错误
通过这个查询,我在数据库中选择月份。光标返回的是确切的月份,但当我进行转换以显示全名时,将在下个月显示。例如,游标返回6,而方法返回getDisplayName July
SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
String sql = "SELECT DISTINCT strftime('%m',"+Table.DATA+") FROM "+Table.TABLE_NAME;
Cursor c = db.rawQuery(sql, null);
while (c.moveToNext()){
int monthNumero = (c.getInt(0));
Calendar ca = Calendar.getInstance();
ca.set(Calendar.MONTH, monthNumero);
String monthName = ca.getDisplayName
(Calendar.MONTH, Calendar.LONG, Locale.getDefault()).toUpperCase();
result1.add(monthName);
}
db.close();
# 1 楼答案
是的,会的。因为
Calendar.MONTH
“逻辑字段”是基于0的。(疯狂的决定,但是……)基本上你需要从月数中减去1:
例如
Calendar.JANUARY
被记录为具有0的值# 2 楼答案
爪哇。时间
java.util
日期时间API及其格式化APISimpleDateFormat
已经过时且容易出错。建议完全停止使用它们,并切换到java.time
,即modern Date-Time API*使用
java.time
现代日期时间API的解决方案:输出:
ONLINE DEMO
从Trail: Date Time了解有关现代日期时间API的更多信息
*无论出于何种原因,如果您必须坚持使用Java 6或Java 7,您可以使用ThreeTen-Backport来支持大部分Java。Java 6&;的时间功能;7.如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。