android sqlite strftime长月名

时间:2014-06-17 14:06:30

标签: android sqlite date time strftime

使用此查询,我从数据库中获取数字格式的月份。我可以用长格式获得月份吗? ' MMMM'

private List<String> ottieniMesi(){
    List<String> result1 = new LinkedList<String>();

    SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();

    String sql = "SELECT DISTINCT strftime('%m',"+Table.DATE+") FROM "+Table.TABLE_NAME;
    Cursor c = db.rawQuery(sql, null);

    while (c.moveToNext()){
        result1.add(c.getString(0));

    }
    db.close();
    return result1;
}

2 个答案:

答案 0 :(得分:1)

没有。 sqlite date and time functions不支持此类转换。

请考虑在应用程序代码中进行转换。

例如:

int monthNumber = ...; // the value from query
monthNumber--; // convert to 0-based for Calendar
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, monthNumber);
String monthName = c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());

答案 1 :(得分:0)

java.time

您可以使用 java.time.Month#getDisplayName 获取月份的名称。

演示:

import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        // An arbitrary month number for demo - you are getting this value from the DB
        int monthNumber = 0;

        Month month = Month.of(monthNumber + 1);
        String monthName = month.getDisplayName(TextStyle.FULL, Locale.ENGLISH);

        System.out.println(monthName);
    }
}

输出:

January

注意:此代码假设您正在获取基于 0monthNumber,即 1 月为 0,二月为 1,依此类推。如果不是这种情况,请仅使用 monthNumber 而不是 monthNumber + 1

modern date-time API 中了解有关 Trail: Date Time* 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project