Отображение даты и времени в формате и языке устройства пользователя - PullRequest
0 голосов
/ 02 ноября 2018

Мне нужно отобразить дату и время в формате настроек устройства пользователя (с текстом «at»). Например:

На устройстве США это может быть: 2 ноября 2018 года в 17:28:20

На индийском: 2 ноября 2018 года в 17: 28: 20

На русском языке: 2 ноября 2018 года в 17: 28: 20

Это должно зависеть от пользовательских настроек устройства и языка. Также он должен содержать секунды. Это должно выглядеть как дата и время в пользовательских обзорах на консоли Google Play.

Не могли бы вы помочь, как это реализовать?

p.s. Я храню информацию о дате и времени в sqlite и читаю так:

String milliseconds = cursor.getString(cursor.getColumnIndex("datetime"));    
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
try {
    date = format.parse(milliseconds);
    //But how to format this date now?
    //I found the following two functions:
    Format dateFormat = android.text.format.DateFormat.getLongDateFormat(context);
    Format timeFormat = android.text.format.DateFormat.getTimeFormat(context);
    String finalDateTime = dateFormat.format(date) + " at " + timeFormat.format(date); 
    //But here time without seconds. How to add seconds?
}

Кроме того, может быть, есть более правильный способ чтения из базы данных? Но это второй вопрос.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Используйте это:

     Locale locale;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        locale = Resources.getSystem().getConfiguration().getLocales().get(0);
    } else {
        locale = Resources.getSystem().getConfiguration().locale;
    }

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd MMMM hh:mm:ss",locale);
    String datetime = dateformat.format(c.getTime());
    System.out.println("Date  "+datetime);
0 голосов
/ 02 ноября 2018

Проблема в том, что вы не форматируете дату, используя устройство, соответствующее его языку. Из документации используйте:

public SimpleDateFormat (String pattern, Locale locale)

Создает SimpleDateFormat, используя данный шаблон и символы формата даты по умолчанию для данной локали.

Так что-то вроде этого:

SimpleDateFormat result = new SimpleDateFormat(pattern, locale);
format.setTimeZone(TimeZone.getDefault());
format.format(date);

Date date = new Date(milliseconds);

try {
    Locale locale;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        locale = Resources.getSystem().getConfiguration().getLocales().get(0);
    } else {
        locale = Resources.getSystem().getConfiguration().locale;
    }

    SimpleDateFormat format = new SimpleDateFormat("dd MMMM hh:mm:ss", locale);
    String formatedDate = format.format(new Date());
}

Если вы хотите отформатировать вашу дату по-другому, проверьте эту страницу документации: https://developer.android.com/reference/java/text/SimpleDateFormat

...