Как я могу получить дату в формате MM/DD/YY из Timestamp
Я хочу получить дату в формате MM/DD/YY
из метки времени.
Я использовал метод ниже, но он не дает правильный вывод
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(Long.parseLong(1306249409));
Log.d("Date--",""+cal.DAY_OF_MONTH);
Log.d("Month--",""+cal.MONTH);
Log.d("Year--",""+cal.YEAR);
Но он дает вывод, как показано ниже
Дата - 5
Месяц - 2
Год - 1
Правильная дата 24 мая 2010 года для отметки времени - 1306249409
Примечание. Временная метка получена веб-службой, которая используется в моем приложении.
Ответы
Ответ 1
Лучший подход
Просто используйте SimpleDateFormat
new SimpleDateFormat("MM/dd/yyyy").format(new Date(timeStampMillisInLong));
Ошибка в вашем подходе
DAY_OF_MONTH
, MONTH
,.. и т.д. - это просто константное значение int, используемое классом Calendar
внутри
Вы можете получить дату, представленную cal
, на cal.get(Calendar.DATE)
Ответ 2
Используйте SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String time = sdf.format(date);
Ответ 3
Что не так:
Calendar.DAY_OF_MONTH
, Calendar.MONTH
и т.д. являются статическими константами, используемыми для доступа к этим конкретным полям. (Они останутся постоянными, независимо от того, что setTimeInMillis
вы предоставляете.)
Как его решить:
Чтобы получить эти конкретные поля, вы можете использовать .get(int field)
-method, например:
Log.d("Month--",""+cal.get(Calendar.MONTH));
Как указывали другие, существуют более удобные способы форматирования даты регистрации. Вы можете использовать, например, SimpleDateFormat
, или, как я обычно делаю при регистрации, форматированную строку и String.format(formatStr, Calendar.getInstance())
.
Ответ 4
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy");
String s = formatter.format(date);
System.out.println(s);
Ответ 5
TimeZone utc = TimeZone.getTimeZone("UTC"); // avoiding local time zone overhead
final Calendar cal = new GregorianCalendar(utc);
// always use GregorianCalendar explicitly if you don't want be suprised with
// Japanese Imperial Calendar or something
cal.setTimeInMillis(1306249409L*1000); // input need to be in miliseconds
Log.d("Date--",""+cal.get(Calendar.DAY_OF_MONTH));
Log.d("Month--",""+cal.get(Calendar.MONTH) + 1); // it starts from zero, add 1
Log.d("Year--",""+cal.get(Calendar.YEAR));
Ответ 6
Java использует количество миллисекунд с 1 января 1970 года для представления времени. Если вы вычислите время, представленное 1306249409 миллисекундами, вы обнаружите, что это всего 362 дня, поэтому ваши предположения ошибочны.
Кроме того, cal.DAY_OF_MONTH
содержит константу. Используйте cal.get(Calendar.DAY_OF_MONTH)
, чтобы получить день месяца (то же самое для других частей даты).
Ответ 7
используйте String.format
, который способен конвертировать длинные (миллисекунды) в строку даты/времени в разных форматах:
String str;
long time = 1306249409 * 1000L; // milliseconds
str = String.format("%1$tm/%1$td/%1$ty", time); // 05/24/11
str = String.format("%tF", time); // 2011-05-24 (ISO 8601)
str = String.format("Date--%td", time); // Date--24
str = String.format("Month--%tm", time); // Month--05
str = String.format("Year--%ty", time); // Year--11
: строка формата.