#android #date #time
#java #Android #Дата #время
Вопрос:
В Android дата каждого события (например, дня рождения и годовщины) сохраняется в строковом формате, например, «2011-12-24».
Это, по крайней мере, относится к моему телефону. Возможно, некоторые другие телефоны могут сохранять эти даты в других форматах, если у них календарь, отличный от григорианского.
Даже для телефонов с установленным григорианским календарем существуют строки даты с часами и минутами и без них. Я получаю такую строку даты, когда запрашиваю таблицу контактов для события:
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE))
Это приводит к (например):
«2011-12-14» или «2011-12-24T00:00:00Z»
Вы можете видеть, что существует множество различных возможных форматов. Чтобы вычислять с помощью дат, мне нужно преобразовать их из строки в объекты даты, не так ли?
Как я могу это сделать?
PS: я знаю, что есть функция синтаксического анализа для объектов даты Java:
DateFormat myDateFormat = new SimpleDateFormat("dd/MM/yy");
Date tempDate = myDateFormat.parse("24/12/2011");
Но в Android я не знаю, с каким форматом я столкнусь, не так ли?
Ответ №1:
Android работает с объектами даты. Всякий раз, когда вам нужно проанализировать дату из строки, это потому, что эта дата была сериализована, скорее всего, в файле. В этом случае вы бы знали, какой формат был использован. Объект Date используется в настройках, объект date используется почти везде, о чем я могу думать, что касается общих служб, действий и т. Д. Это означает, что почти никогда не требуется анализировать строку из даты, если, как я уже сказал, вы не работаете с сериализованным исходным кодом, читаете его из веб-службы и т. Д. Если вы можете рассказать нам о своем сценарии, вы можете получить более конкретный ответ.
Вы можете получить текущий установленный формат даты следующим образом:
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
Комментарии:
1. Спасибо за приятный и полезный ответ! Я запрашиваю таблицу контактов для события: cursor.getString(cursor.getColumnIndex(ContactsContract. CommonDataKinds. Событие. START_DATE))
2. … и здесь я получаю дату в строковой форме, например «2011-12-24T00:00:00Z». Как я могу получить дату в качестве объекта даты? Нет метода «cursor.getDate ()» …
3. В этом случае вы можете проанализировать его. Кроме того, этот формат даты будет одинаковым независимо от набора языков, поэтому вы можете с уверенностью предположить, что.
4. Ах, так в этом случае нет способа получить объект даты? : D Должен быть один способ — разбор строки глуп и может привести к неправильным результатам, не так ли? Как я узнаю, с какими форматами я столкнусь? Какой часовой пояс?
5. Вы всегда будете получать один и тот же формат, независимо от выбранного пользователем языка. Итак, что бы вы ни получили в своих тестах, вы всегда будете получать. Безопасный способ работы с ним — не передавать формат функции анализа даты.
Ответ №2:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
SimpleDateFormat myDateFormat = new SimpleDateFormat("dd/MM/yy");
Date tempDate;
try {
tempDate = myDateFormat.parse("24/12/2011");
long milliseconds=tempDate.getTime();
Toast.makeText(getApplicationContext(), milliseconds "", 1).show();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}