Получить текущее время и дату на Android

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

991
20 марта '11 в 19:12
источник поделиться
38 ответов
  • 1
  • 2

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

import java.util.Calendar

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

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

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

1165
20 марта '11 в 19:27
источник

Связанные вопросы


Похожие вопросы

Вы можете (но больше не нужно - см. ниже!) использовать 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.

481
20 марта '11 в 19:17
источник

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

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date());
316
18 янв. '12 в 20:44
источник

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

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
206
18 дек. '13 в 5:42
источник

На самом деле безопаснее установить текущий часовой пояс на устройстве с помощью 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 года по UTC). Большая часть форматирование/синтаксический анализ предполагает текст ASCII и поэтому не подходит для использования с не-ASCII-скриптами.

125
11 февр. '12 в 17:02
источник

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

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

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

Feb 27, 2012 5:41:23 PM
76
27 февр. '12 в 15:16
источник

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

    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

56
17 дек. '15 в 9:58
источник

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

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

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

Time currentTime = new Time();
currentTime.setToNow();
48
26 окт. '11 в 2:07
источник

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

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 из здесь.

35
10 нояб. '14 в 22:10
источник

ТЛ; др

Instant.now()  // Current moment in UTC.

…или же…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // In a particular time zone

подробности

Другие ответы, хотя и правильные, устарели. Старые классы даты и времени оказались плохо продуманными, запутанными и хлопотными.

java.time

Эти старые классы были вытеснены фреймворком java.time.

Эти новые классы вдохновлены очень успешным проектом Joda-Time, определенным JSR 310 и расширенным проектом ThreeTen-Extra.

Смотрите руководство по Oracle.

Instant

Instant - это момент времени на UTC с разрешением до наносекунд.

 Instant instant = Instant.now(); // Current moment in UTC.

Часовой пояс

Примените часовой пояс ( ZoneId), чтобы получить ZonedDateTime. Если вы опустите часовой пояс, то текущий часовой пояс по умолчанию для JVM будет применен неявно. Лучше явно указать желаемый/ожидаемый часовой пояс.

Используйте правильные названия часовых поясов в формате continent/region таких как America/Montreal, Europe/Brussels или Asia/Kolkata. Никогда не используйте 3-4-буквенные сокращения, такие как EST или IST поскольку они не являются ни стандартизированными, ни уникальными.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Генерация строк

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

ISO 8601

Вы можете вызывать методы toString для форматирования текста, используя общий и разумный стандарт ISO 8601.

String output = instant.toString();

2016-03-23T03: 09: 01.613Z

Обратите внимание, что для ZonedDateTime метод toString расширяет стандарт ISO 8601, добавляя имя часового пояса в квадратных скобках. Чрезвычайно полезная и важная информация, но не стандартная.

2016-03-22T20: 09: 01.613-08: 00 [Америка /Los_Angeles]

Пользовательский формат

Или укажите свой собственный конкретный шаблон форматирования с помощью класса DateTimeFormatter.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

Укажите Locale для человеческого языка (английский, французский и т.д.), Который будет использоваться при переводе названия дня/месяца, а также при определении культурных норм, таких как порядок года, месяца и даты. Обратите внимание, что Locale имеет ничего общего с часовым поясом.

formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

Локализации

А еще лучше, пусть java.time выполняет работу по локализации автоматически.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) );  // Or Locale.CANADA_FRENCH and so on.

О java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытеснять неприятные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, и SimpleDateFormat.

Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.

Чтобы узнать больше, см. Учебник по Oracle. И поиск для многих примеров и объяснений. Спецификация JSR 310.

Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*.

Где взять классы java.time?

  • Java SE 8, Java SE 9, Java SE 10 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport.
  • Android
    • Более поздние версии Android связывают реализации классов java.time.
    • Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). Смотрите Как использовать ThreeTenABP….

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и другие.

32
23 марта '16 в 5:49
источник

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

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);
32
13 нояб. '12 в 19:11
источник

Есть несколько вариантов, поскольку Android - это в основном Java, но если вы хотите записать его в textView, следующий код выполнит трюк:

String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
24
20 марта '11 в 19:20
источник
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

Форматы формата даты

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of M determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d determine length of format (e.g. d or dd)
h   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone
22
06 июля '16 в 12:27
источник
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);
16
21 окт. '12 в 0:17
источник

Это метод, который будет полезен для получения даты и времени:

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

Вы можете вызвать этот метод и получить текущие значения даты и времени:

2017/01//09 19:23
13
09 мая '17 в 22:41
источник
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

Это даст вам, например, 12:32.

Не забудьте импортировать android.text.format.Time;

12
18 марта '13 в 15:31
источник
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);
12
24 апр. '13 в 12:32
источник

Вы также можете использовать android.os.SystemClock. Например, SystemClock.elapsedRealtime() даст вам более точные показания времени, когда телефон спит.

11
09 авг. '11 в 15:13
источник

Для настроенного формата времени и даты:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

Вывод выглядит как ниже: 2015-06-18T10: 15: 56-05: 00

9
18 июня '15 в 18:20
источник

Если вам нужна текущая дата,

Calendar cc = Calendar.getInstance();
int year=cc.get(Calendar.YEAR);
int month=cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year+":"+month+":"+mDay);

Если вам нужно текущее время,

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format"+String.format("%02d:%02d", mHour , mMinute ));
9
01 февр. '17 в 16:18
источник

Вы можете получить дату, используя:

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

Это даст вам результат в хорошей форме, как в этом примере: "2014/02/09".

8
09 февр. '14 в 14:02
источник
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
8
16 июля '13 в 12:02
источник
Time now = new Time();
now.setToNow();

Попробуйте это для меня тоже.

8
17 февр. '13 в 9:01
источник

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

 DateFormat df = new SimpleDateFormat("HH:mm"); //format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1=new SimpleDateFormat("yyyy/MM/dd");//foramt date
 String date=df1.format(Calendar.getInstance().getTime());
7
06 янв. '17 в 17:05
источник

Ну, у меня возникли проблемы с некоторыми ответами API, поэтому я скомплектовываю этот код, надеюсь, он будет обслуживать их ребята:

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

Вывод:      03:25 PM - 2017/10/03

6
03 окт. '17 в 23:32
источник

Ниже метод вернет текущую дату и время в String. Используйте другой часовой пояс в соответствии с вашим текущим часовым поясом. Я использовал GMT

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}
5
25 июля '17 в 14:48
источник

Попробуйте это

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
4
23 февр. '16 в 17:02
источник

Вы должны использовать класс Calender в соответствии с новым API. Класс Date теперь устарел.

Calendar cal = Calendar.getInstance();

String date = ""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);

String time = ""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);
4
04 февр. '15 в 10:28
источник

Попробуйте этот код, на котором отображаются текущие дата и время

 Date date = new Date(System.currentTimeMillis());
 SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
                         Locale.ENGLISH);
 String var = dateFormat.format(date));
3
25 мая '15 в 11:58
источник

попробуйте использовать ниже код:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
1
19 сент. '16 в 15:14
источник
  • 1
  • 2

Посмотрите другие вопросы по меткам или Задайте вопрос