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

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

Ответ 1

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

import java.util.Calendar

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

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

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

Ответ 2

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

Ответ 3

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

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

Или

Дата:

String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

Время:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());

Ответ 4

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

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

Ответ 5

На самом деле безопаснее установить текущий часовой пояс на устройстве с помощью 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-скриптами.

Ответ 6

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

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

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

Feb 27, 2012 5:41:23 PM

Ответ 7

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

    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

Ответ 8

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

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

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

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

Ответ 9

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

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

Ответ 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 );

Table of date-time types in Java, both modern and legacy

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

Вы можете легко сгенерировать 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[America/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 );

Localizing

ЛокализацияА еще лучше, пусть 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

Table listing which implementation of the *java.time* technology to use on which versions of Java and Android.

Среда 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 (& lt; 26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянуто выше). Смотрите Как использовать ThreeTenABP....

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

Ответ 11

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

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);

Ответ 12

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

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

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);

Ответ 13

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

Ответ 14

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);

Ответ 15

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

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

Ответ 16

Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

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

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

Ответ 17

    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);

Ответ 18

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

Ответ 19

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

    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

Ответ 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 ));

Ответ 21

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

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

Ответ 22

Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();

Ответ 23

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

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

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

Ответ 24

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

На Java

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

В Котлине

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
    var myDate: String =  current.format(formatter)
    Log.d("Date","DATE : " + myDate)
} else {
    var date = Date()
    val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
    val myDate: String = formatter.format(date)
    Log.d("Date","DATE : " + myDate)
}

Шаблоны Date Formater

"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

Ответ 25

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

 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());

Ответ 26

Ну, у меня возникли проблемы с некоторыми ответами 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

Ответ 27

Ниже метод вернет текущую дату и время в 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);
}

Ответ 28

Вы должны использовать класс 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);

Ответ 29

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

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());

Ответ 30

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

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