Відповіді:
Ви можете використовувати:
import java.util.Calendar
Date currentTime = Calendar.getInstance().getTime();
У Календарі є багато констант для всього необхідного.
Редагувати:
Перевірте документацію щодо класів календаря
Calendar.getInstance().getTime()
або Calendar.getInstance().getTimeInMillis()
спрацює.
Ви можете ( але більше не слід - див. Нижче!) Використовувати 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
почне повторюватися.
SystemClock.uptimeMillis()
для інтервалу часу. Оскільки саме для цього використовується більшість вбудованих функцій, існує сильна мотивація, щоб вона була добре реалізована на всіх пристроях. Дивіться дискусію в SystemClock ... Якщо ви хочете співвіднести це з часом дня, в додатку onResume, прочитайте і це, і Time / setToNow / toMillis. Запам’ятайте різницю між тими.
GregorianCalendar
його витіснили багато років тому на Java та в пізніших Android, зокрема, класами java.timeZonedDateTime
. Для попереднього Android дивіться проекти ThreeTen-Backport і ThreeTenABP .
Якщо ви хочете отримати дату та час у визначеному шаблоні, ви можете скористатися наступним:
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());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
посередині
Для тих, хто може скористатись налаштованим форматом, ви можете використовувати:
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
Насправді, безпечніше встановити поточний часовий пояс, встановлений на пристрої 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.
Для поточної дати та часу використовуйте:
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Які виходи:
Feb 27, 2012 5:41:23 PM
Instant.now() // Current moment in UTC.
… Або…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Інші відповіді, хоча і правильні, застаріли. Старі класи часу знайшли поганий дизайн, заплутаність та клопітка.
Ці старі класи були витіснені рамкою 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
як текстове подання значення дати та часу. Ви можете використовувати стандартний формат, власний власний формат або автоматично локалізований формат.
Ви можете зателефонувати за 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 8 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date
, Calendar
, і SimpleDateFormat
.
Проект Joda-Time , який зараз знаходиться в режимі обслуговування , радить перейти до класів java.time .
Щоб дізнатися більше, дивіться навчальний посібник Oracle . І шукайте переповнення стека за багатьма прикладами та поясненнями. Специфікація - JSR 310 .
Ви можете обмінюватися об'єктами java.time безпосередньо зі своєю базою даних. Використовуйте драйвер JDBC, сумісний з JDBC 4.2 або пізнішої версії. Немає необхідності в струнах, немає потреби в java.sql.*
заняттях.
Де отримати класи java.time?
Instant.now()
і ZonedDateTime.now()
потрібен API 26
Щоб визначити поточний час, ви можете використовувати System.currentTimeMillis()
стандартний на Java. Потім ви можете використовувати його для створення побачення
Date currentDate = new Date(System.currentTimeMillis());
І як згадують інші, щоб створити час
Time currentTime = new Time();
currentTime.setToNow();
Cannot resolve constructor Date()
в Android, Android SDK використовує суміш Java 6 і 7.
Date currentDate = new Date(System.currentTimeMillis());
правильно
new Date(System.currentTimeMillis())
неправильно: (a) це зайве , оскільки це точно так само, як new Date()
. (b) Класичний java.util.Date
клас тепер витісняється java.time.Instant
з Java 8 та новіших версій. Знову перенесено на Java 6 та 7 у проекті ThreeTen-Backport та на попередній Android (<26) у ThreeTenABP .
Ви можете використовувати код:
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 .
Легко, ви можете розсікати час, щоб отримати окремі значення для поточного часу:
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);
Існує кілька варіантів, оскільки Android - це головним чином Java, але якщо ви хочете записати його у textView, наступний код зробив би цю хитрість:
String currentDateTimeString = DateFormat.getDateInstance().format(new Date());
// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
Calendar
або GregorianCalendar
. Date
Клас є застарілим.
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
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);
Це метод, який буде корисним для отримання дати та часу:
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
SimpleDateFormat
s & 2 Date
s ... чи не можете ви просто використовувати "yyyy/MM/dd HH:mm"
як формат і календар дзвінків один раз?
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);
Для поточної дати та часу з форматом Використовуйте
На 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
SimpleDateFormat
клас. Навіть перед тим, як Oreo вам не потрібно, ви можете замість цього використовувати ThreeTenABP , backport java.time, сучасний API дати та часу Java.
Якщо вам потрібна поточна дата:
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));
Для налаштованого формату часу та дати:
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
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Ви можете отримати дату, скориставшись:
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");
Це дасть результат у гарній формі, як у цьому прикладі: "2014/02/09".
Time t = new Time();
використовуватиме часовий пояс за замовчуванням. На мій досвід, за замовчуванням == поточний.
Ну, у мене були проблеми з деякими відповідями 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
Ви можете просто використовувати наступний код:
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());
Спробуйте це
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
Нижче метод поверне поточну дату та час у рядку. Використовуйте різний часовий пояс відповідно до вашого фактичного часового поясу. Я використовував 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);
}
Ви повинні використовувати клас календаря відповідно до нового 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);
Спробуйте використовувати наведений нижче код:
Date date = new Date();
SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());
String currentDate = dateFormatWithZone.format(date);