Як отримати поточний час та дату в Android


1107

Як я можу отримати поточний час і дату в додатку для Android?


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

Відповіді:


1309

Ви можете використовувати:

import java.util.Calendar

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

У Календарі є багато констант для всього необхідного.

Редагувати:
Перевірте документацію щодо класів календаря


14
+1 Це було дуже корисно. Будучи новим, це всі ті маленькі примхи, які нам потрібні ... Я використовую Календар, щоб отримати побачення з Джуліаном. Набагато простіше, ніж отримувати мілісекунди і з'ясовувати, чи дорівнює ціна сьогодні;)
Білл Мот

9
Але звідки це тягне дату та час? налаштування пристрою Android?
Кайл Клегг

12
@Kyle Так, це базується на налаштуваннях часу / часовому поясі пристрою. Цитата з doc : "Метод 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

Не використовуйте часовий клас . Це буде видалено в майбутньому і має багато проблем з цим.
Сенді Чапман

1
> Цей клас застарілий у рівні API 22. Використовуйте натомість GregorianCalendar. Дивіться тут
Neo

Насправді, GregorianCalendarйого витіснили багато років тому на Java та в пізніших Android, зокрема, класами java.timeZonedDateTime . Для попереднього Android дивіться проекти ThreeTen-Backport і ThreeTenABP .
Василь Бурк

365

Якщо ви хочете отримати дату та час у визначеному шаблоні, ви можете скористатися наступним:

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

Це дасть час у UTC, має прийняти до часових поясів.
Андрас Балаш Лайта

10
Остерігайтеся, SimpleDateFormat може бути проблематичним, якщо продуктивність є проблемою. У моєму додатку у мене був власний вигляд, який мав близько 20 HH: MM міток, які відображали конкретний час (довгі цілі числа, що містять мілісекунди), і рівну кількість ресурсів, що витягуються. Первісне тестування показало, що взаємодія була не такою рідкою, як я хотів. Коли я профілював onDraw (), я виявив, що дзвінки SimpleTimeFormatter займають 80% часу. Насправді я читаю цю сторінку як частину пошуку більш ефективного форматера та щоб дізнатися більше про календарі тощо
William T. Mallard

3
Так, але вже не. Я не усвідомлював накладних накладних витрат і припустив, що це був майже POJO.
Вільям Т. Маллард

32
Коротше кажучи:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Пратік Бутані

4
ви можете вставити sdf.setTimeZone(TimeZone.getDefault())посередині
Harvey

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

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) у дату, яка не може існувати, наприклад, час стіни, який було пропущено через перехід DST, призведе до дати в 1969 році (тобто -1, або за 1 секунду до 1 січня 1970 UTC). Значна частина форматування / розбору передбачає текст ASCII і тому не підходить для використання із сценаріями, що не належать до ASCII.


Час з якого пакета потрібно імпортувати?
ManishSB

Цей клас був застарілий у рівні API 22. Натомість ми можемо використовувати GregorianCalendar.
Чолецький

78

Для поточної дати та часу використовуйте:

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

Які виходи:

Feb 27, 2012 5:41:23 PM

я отримав поточну дату, день і час роботи системи, але час не змінюється. Я хочу збільшити час на секунди на секунди. Як я можу це зробити?
Бхавеш Гірпара

2
Це рекомендований спосіб зробити це, відповідно до Android API: developer.android.com/reference/java/text/… Дякую!
M Granja

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

спочатку

другий третій


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 [Америка / Лос-Анджелес]

Спеціальний формат

Або вкажіть свій 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… .

У таблиці перелічено, яку реалізацію технології * 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();

13
Не потрібно System.currentTimeMillis(); просто new Date() робить те ж саме .
Джонік

@Jonik Cannot resolve constructor Date()в Android, Android SDK використовує суміш Java 6 і 7.
surfer190

1
Дякую. Date currentDate = new Date(System.currentTimeMillis());правильно
mghhgm

@mghhgm Ні, new Date(System.currentTimeMillis())неправильно: (a) це зайве , оскільки це точно так само, як new Date(). (b) Класичний java.util.Dateклас тепер витісняється java.time.Instantз Java 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з тут .


FYI, тривожні старі класи дату, такі як 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);

як можна отримати дату протягом наступних 5-10 днів ... це ручний розрахунок тут?
CoDe

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

8
Ви повинні використовувати Calendarабо GregorianCalendar. DateКлас є застарілим.
Йозеф граф

Спасибі товариш :) Я взагалі про це не здогадувався
dLobatog

12
Відповідно до довідкової документації Date () ( developer.android.com/reference/java/util/Date.html ) немає нічого, що стосується застарілого класу Date () - проте кілька методів і конструкторів застаріли.
Зак Сет

2
Це призведе до неправильного результату в сенсі поточних налаштувань користувача (наприклад, формат часу 12/24). Використовуйте android.text.format.DateFormat.getTimeFormat (контекст контексту), щоб отримати DateFormat для поточних налаштувань користувача.
wonder.mice

@Zac ви маєте рацію, навіть метод getTime Дата ще більше використовуйте повне

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
Ankit Gupta

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

Мені не подобається тісний зв’язок логіки презентації та логіки процесу; Я вважаю за краще метод, який просто виконує форматування та приймає параметр введення дати. Я також не розумію, чому ви використовуєте 2 SimpleDateFormats & 2 Dates ... чи не можете ви просто використовувати "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

Для поточної дати та часу з форматом Використовуйте

На 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)
}

Шаблони форматів дати

"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 , backport java.time, сучасний API дати та часу Java.
Оле ВВ

11

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


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

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

Ви можете отримати дату, скориставшись:

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

Вихід: 15: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());

Це ідеальне одне вкладиш та елегантне рішення. Це все, що потрібно, а не зайве довге рішення, як в інших відповідях.
Zeeshan

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

Ви повинні використовувати клас календаря відповідно до нового 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.