Получить текущее время и дату на Android - PullRequest
1005 голосов
/ 20 марта 2011

Как узнать текущее время и дату в приложении для Android?

Ответы [ 37 ]

1182 голосов
/ 20 марта 2011

Вы можете использовать:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

В календаре есть множество констант для всего, что вам нужно.

Редактировать:
Проверить Календарьдокументация класса

482 голосов
/ 20 марта 2011

Вы можете (, но больше не должны - см. Ниже!) Использовать android.text.format.Time :

Time now = new Time();
now.setToNow();

Из ссылки, указанной выше:

Класс Time - более быстрая замена для классов java.util.Calendar и java.util.GregorianCalendar.Экземпляр класса Time представляет момент времени, указанный с точностью до секунды.


ПРИМЕЧАНИЕ 1: Прошло несколько лет с тех пор, как я написал этот ответ, и оно старом, специфичном для Android и теперь устаревшем классе.Google сейчас говорит , что "[t] его класс имеет ряд проблем, и вместо него рекомендуется использовать GregorianCalendar ".


ПРИМЕЧАНИЕ 2: Несмотря на то, что класс Time имеет метод toMillis(ignoreDaylightSavings), это просто удобство для перехода к методам, которые ожидают время в миллисекундах.Значение времени с точностью только до одной секунды ;доля в миллисекундах всегда равна 000.Если в цикле вы делаете

Time time = new Time();   time.setToNow();
Log.d("TIME TEST", Long.toString(time.toMillis(false)));
... do something that takes more than one millisecond, but less than one second ...

Результирующая последовательность будет повторять то же значение, например 1410543204000, до тех пор, пока не начнется следующая секунда, после чего 1410543205000 начнет повторяться.

320 голосов
/ 18 января 2012

Если вы хотите получить дату и время по определенному шаблону, вы можете использовать следующее:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date());
213 голосов
/ 18 декабря 2013

Для тех, кто предпочитает предпочитаемый формат, вы можете использовать:

DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

В то время как вы можете иметь шаблоны DateFormat, такие как:

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
126 голосов
/ 11 февраля 2012

На самом деле безопаснее установить текущий часовой пояс, установленный на устройстве, с помощью Time.getCurrentTimezone(), иначе вы получите текущее время в UTC.

Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

Затем вы можете получить все нужные поля даты, например:

textViewDay.setText(today.monthDay + "");             // Day of the month (1-31)
textViewMonth.setText(today.month + "");              // Month (0-11)
textViewYear.setText(today.year + "");                // Year 
textViewTime.setText(today.format("%k:%M:%S"));  // Current time

См. android.text.format.Time класс для всех деталей.

UPDATE

Как отмечают многие, Google говорит, что у этого класса есть ряд проблем, и его больше нельзя использовать:

Этот класс имеет ряд проблем, и рекомендуется Вместо этого используется GregorianCalendar.

Известные проблемы:

По историческим причинам при выполнении расчетов времени арифметика в настоящее время выполняется с использованием 32-разрядных целых чисел. Это ограничивает надежный временной диапазон, представленный с 1902 до 2037 года. статья в Википедии о проблеме 2038 года для деталей. Не полагайтесь на это поведение; это может измениться в будущем. призвание switchTimezone (String) на дату, которая не может существовать, например на стене время, которое было пропущено из-за перехода на летнее время, приведет к дате в 1969 г. (т.е. -1 или за 1 секунду до 1 января 1970 г. по Гринвичу). Многое из форматирование / синтаксический анализ предполагает использование текста ASCII и поэтому не подходит для использования со сценариями не ASCII.

76 голосов
/ 27 февраля 2012

Для текущей даты и времени используйте:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Какие выходы:

Feb 27, 2012 5:41:23 PM
56 голосов
/ 17 декабря 2015

Попробуйте таким образом. Все форматы приведены ниже, чтобы получить формат даты и времени.

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

first

second third

49 голосов
/ 26 октября 2011

Для получения текущего времени вы можете использовать System.currentTimeMillis(), который является стандартным в Java. Тогда вы можете использовать его для создания даты

Date currentDate = new Date(System.currentTimeMillis());

И как уже упоминалось другими, чтобы создать время

Time currentTime = new Time();
currentTime.setToNow();
35 голосов
/ 10 ноября 2014

Вы можете использовать код:

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

Вывод:

2014-11-11 00:47:55

Вы также можете получить дополнительные параметры форматирования для SimpleDateFormat из здесь .

32 голосов
/ 13 ноября 2012

Легко, вы можете разделить время, чтобы получить отдельные значения для текущего времени, следующим образом:

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

То же самое относится и к дате:

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...