Как узнать текущее время и дату в Android

1109

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

M7M
источник
3
43 ответа! Хотя многие из них были хорошими, когда они были написаны, хороший ответ для использования в 2018 году здесь .
Оле В.В.

Ответы:

1310

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

import java.util.Calendar

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

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

Изменить:
проверить документацию класса календаря

miken32
источник
14
+1 Это было очень полезно. Будучи новичком, это все эти маленькие лакомые кусочки, которые нам нужны ... Я использую Календарь, чтобы получить юлианскую дату. Намного проще, чем получить миллисекунды и выяснить, равняется ли значение сегодня;)
Билл Мот
9
Но откуда это тянуть дату и время? само устройство андроид настраивается?
Кайл Клегг
12
@Kyle Да, это основано на настройках времени устройства / часового пояса. Цитата из документа : «Метод getInstance Календаря возвращает календарь, локаль которого основана на системных настройках и поля времени которого были инициализированы с текущей датой и временем» - (над первой строкой кода образца в документации класса).
3
+1 это решение с точностью до миллисекунды, как раз то, что мне нужно.
Игорь Селая
42
Как говорит @adamdport, это на самом деле не отвечает на вопрос ... Calendar.getInstance().getTime()или Calendar.getInstance().getTimeInMillis()сработает.
akousmata
487

Вы можете ( но больше не должны - смотрите ниже!) Использовать 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не начнется следующая секунда, после чего начнется повторение.

Томас Падрон-Маккарти
источник
2
@InsanityOnABun и Мухаммед Бабар. Нет нет нет. Документы говорят «указано со второй точностью». Даже самый простой тест (получение текущего времени в цикле, toMillis и запись / печать результата) показал бы, что полученное время имеет значение 000 в миллисекундах!
ToolmakerSteve
3
@IgorZelaya Если вам нужна точность в миллисекундах, вы, скорее всего, используете интервал времени , а не время суток. Документы Android рекомендуют SystemClock.uptimeMillis()для интервального времени. Так как это то, что используется большинством встроенных функций, есть сильная мотивация для того, чтобы это было хорошо реализовано на всех устройствах. Смотрите обсуждение в SystemClock ... Если вы хотите соотнести это с временем суток, в onResume приложения прочитайте и это, и Time / setToNow / toMillis. Помните разницу между этими.
ToolmakerSteve
Не используйте класс Time . Он будет удален в будущем, и у него будет много проблем.
Сэнди Чепмен
1
> Этот класс устарел на уровне API 22. Вместо этого используйте GregorianCalendar. Смотрите здесь
Neo
На самом деле, он GregorianCalendarбыл вытеснен несколько лет назад в Java, а затем и в Android классами java.time , в частности ZonedDateTime. Для более ранних версий Android см. Проекты ThreeTen- Backport и ThreeTenABP .
Василий Бурк
367

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

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());
Miciurash
источник
Это даст время в UTC, должно адаптироваться к часовым поясам.
Андрас Балас Лайта
10
Осторожно, SimpleDateFormat может быть проблематичным, если производительность является проблемой. В моем приложении было пользовательское представление, в котором было около 20 меток ЧЧ: ММ, представляющих определенное время (длинные целые числа, содержащие миллисекунды), и такое же количество доступных для рисования ресурсов. Первоначальное тестирование показало, что взаимодействие не было таким подвижным, как я хотел. Когда я профилировал onDraw (), я обнаружил, что вызовы SimpleTimeFormatter занимают 80% времени. Фактически, я читаю эту страницу как часть поиска более эффективного средства форматирования, чтобы узнать больше о календарях и т. Д.
Уильям Т. Маллард,
3
Да, но не больше. Я не осознавал сопутствующих накладных расходов и предполагал, что это в значительной степени POJO.
Уильям Т. Маллард
32
Короче говоря:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Пратик Бутани
4
Вы можете вставить sdf.setTimeZone(TimeZone.getDefault())в середине
Харви
231

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

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
ANemati
источник
126

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

ОБНОВИТЬ

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

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

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

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

Канэда
источник
Время должно быть импортировано из какой упаковки?
ManishSB
Этот класс устарел на уровне API 22. Вместо этого мы можем использовать GregorianCalendar.
Choletski
78

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

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

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

Feb 27, 2012 5:41:23 PM
Kirit
источник
Я получил текущую дату, день и время системы, но время не меняется. Я хочу увеличить время секунды на секунды. Как я могу это сделать?
Бхавеш Хирпара
2
Это рекомендуемый способ сделать это, согласно API Android: developer.android.com/reference/java/text/… Спасибо!
М Гранджа
58

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

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

первый

второй в третьих

Amitsharma
источник
53

ТЛ; др

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

Таблица типов даты и времени в Java, как современных, так и устаревших

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

Вы можете легко создать 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 Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация 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… .

Таблица, в которой указана реализация технологии * java.time * для каких версий Java и Android.

Базилик Бурк
источник
2
@ giraffe.guru Перечитайте мой ответ. Вы пропустили третью пулю. Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP .
Василий Бурк
Instant.now()и ZonedDateTime.now()требуется API 26
Райд
2
@Ryde Как я сказал giraffe.guru, перечитайте мой ответ. Ищите третью пулю с упоминанием «Android».
Базилик Бурк
Я верю, что вы правы: ваша новая таблица версий java.time передает сообщение более просто и легко, чем список с маркерами. Если бы это был я, я бы усложнил ситуацию немного дальше и поставил бы галочку в скобках (или что-то подобное) в ThreeTenBackport / Java 8+, а также в ThreeTenABP / Android 26+, так как эти комбинации работают, только нет Обычно нет смысла их использовать. Разрабатываются приложения для Android, использующие ThreeTenABP и предназначенные для целого ряда уровней API Android как на уровне, так и на уровне ниже 26. Мне кажется, что разработчики в этих случаях хорошо выбирают.
Оле В.В.
1
@ OleV.V. Спасибо, что предложили установить дополнительную галочку в графической таблице. Я использовал это в более поздних версиях таблицы. Намного улучшилось
Василий Бурк
52

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

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

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

Time currentTime = new Time();
currentTime.setToNow();
JosephL
источник
13
Нет необходимости для System.currentTimeMillis(); просто new Date() делает то же самое .
Jonik
@Jonik Cannot resolve constructor Date()в Android, Android SDK использует смесь Java 6 и 7.
surfer190
1
Спасибо. Date currentDate = new Date(System.currentTimeMillis());правильно
мгхгм
@ mghhgm Нет, new Date(System.currentTimeMillis())не верно: (а) это избыточно, так как это точно так же, как new Date(). (b) Проблемный java.util.Dateкласс теперь вытеснен с java.time.InstantJava 8 и позже. Обратный перенос в Java 6 & 7 в проекте ThreeTen-Backport и в более раннюю версию Android (<26) в ThreeTenABP .
Василий Бурк
37

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

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

Химаншу Аггарвал
источник
К вашему сведению, проблемные старые классы даты и времени, такие как java.util.Date, java.util.Calendarи java.text.SimpleDateFormatтеперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .
Базилик Бурк
32

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

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);
SkateJerrySkate
источник
как можно получить дату на следующие 5-10 дней .. это ручной расчет здесь?
Код
@CoDe Вы используете дату для этого
FindOutIslamNow
27

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

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

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
dLobatog
источник
8
Вы должны использовать Calendarили GregorianCalendar. DateКласс является устаревшим.
Джозеф Эрл
Спасибо, приятель :) Я даже понятия не имел об этом
dLobatog
12
В соответствии со справочной документацией Date () ( developer.android.com/reference/java/util/Date.html ) ничего не ссылается на устаревший класс Date (), однако некоторые методы и конструкторы устарели.
Зак Сет
2
Это даст неверный результат в смысле текущих пользовательских настроек (например, в формате времени 12/24). Используйте android.text.format.DateFormat.getTimeFormat (Context context), чтобы получить DateFormat для текущих пользовательских настроек.
wonder.mice
@Zac, вы правы, даже метод getTime в Date еще более полно используется
24
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's determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d's 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's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone
Виньеш К.М.
источник
1
Хотя и другие ответы верны тоже. Мне понравился этот ответ, так как он также помогает решить связанные со временем проблемы. Спасибо @Vighnesh KM
Анкит Гупта
17
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
Jorgesys
источник
Мне не нравится тесная связь логики представления и логики процесса; Я бы предпочел метод, который просто выполняет форматирование и принимает параметр ввода даты. Я также не понимаю, почему вы используете 2 SimpleDateFormatс & 2 Dateс ... разве вы не можете просто использовать "yyyy/MM/dd HH:mm"в качестве формата и календарь вызовов один раз?
AjahnCharles
12
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

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

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

Сэм Хак
источник
12
    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

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

На яве

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
Випул Праджапати
источник
Спасибо за желание участвовать. Вы вносите что-то, чего еще нет в предыдущих 36 ответах? В любом случае вы все еще пользуетесь общеизвестно хлопотным и давно устаревшим SimpleDateFormatклассом. Даже до Oreo вам не нужно, вместо этого вы можете использовать ThreeTenABP , бэкпорт java.time, современный Java-интерфейс даты и времени.
Оле В.В.
11

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

Quadroid
источник
10

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

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));
RejoylinLokeshwaran
источник
9

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

    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

Омар Фарок Аник
источник
8
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Мухаммед Амир Али
источник
8
Time now = new Time();
now.setToNow();

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

Тот человек
источник
8

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

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

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

Аннабель
источник
Конструктор без параметров Time t = new Time();будет использовать часовой пояс по умолчанию. По моему опыту, по умолчанию == текущий.
Уильям Т. Маллард
7

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

Чарли
источник
7

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

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

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());
Али Зиаэ
источник
6

Попробуй это

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
Абхинав Кумар
источник
Это идеальный лайнер и элегантное решение. Это все, что нужно, а не ненужные длинные решения, как в других ответах.
Зеешан
5

Метод ниже вернет текущую дату и время в строке, используйте другой часовой пояс в соответствии с вашим фактическим часовым поясом. Я использовал 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);
}
Опасность
источник
4

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

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

Попробуйте использовать следующий код:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
Маникандан К
источник