Как узнать текущее время и дату в приложении для Android?
Как узнать текущее время и дату в Android
Ответы (42)
Вы можете использовать:
import java.util.Calendar
Date currentTime = Calendar.getInstance().getTime();
В календаре есть множество констант для всего, что вам нужно.
Проверьте документацию по классу Calendar.
+1 Это было очень полезно. Поскольку мы новичок, это все эти маленькие лакомые кусочки, которые нам нужны ... Я использую Календарь, чтобы получить дату по юлианскому календарю. Намного проще, чем получить миллисекунды и выяснить, равно ли значение сегодняшнему;)
Но откуда это берет дату и время? Сама настройка андроид устройства?
@Kyle Да, это основано на настройках времени / часового пояса устройства. Цитата из документа: «Метод getInstance календаря возвращает календарь, языковой стандарт которого основан на системных настройках и чьи поля времени были инициализированы текущими датой и временем» - (над первой строкой кода примера в документации класса).
Это просто дает мне текущую секунду, от 0 до 60. Что-то изменилось за последние пару лет?
Как говорит @adamdport, это на самом деле не отвечает на вопрос ... Calendar.getInstance().getTime()
или Calendar.getInstance().getTimeInMillis()
будут работать.
можем ли мы использовать класс и формат «new Date ()» с классом SimpleDateFormat?
К вашему сведению, неприятные старые классы даты и времени, такие как java.util.Date
, java.util.Calendar
и java.text.SimpleDateFormat
, теперь унаследованы, заменены классами java.time. Большая часть функциональных возможностей java.time перенесена на Java 6 и Java 7 в проекте ThreeTen-Backport . Дальнейшая адаптация для более ранних версий Android в проекте ThreeTenABP . См. Как использовать ThreeTenABP… .
отлично, это было действительно полезно, вы классные, самое главное, спасибо!
Сейчас этот метод устарел. В документах вы можете найти новое решение: Calendar.getInstance (). Get (Calendar.HOUR_OF_DAY), если вам нужно получить единственный час, или Calendar.getInstance (). Get (Calendar.MINUTE) и т. Д.
Кто-нибудь знает, как это сравнивается с new Date()
?
Попробуйте это, чтобы легко получить текущую дату и время:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
String currentDateandTime = sdf.format(new Date());
Вы можете получить текущую дату и время с помощью этого кода:
val current_data_time= SimpleDateFormat("MMMMddyyyyHHmm", Locale.getDefault())
val currentDateandTime: String = current_data_time.format(Date())
Если вы используете MMMM: тогда отображается название месяца, например «Март»
Если вы используете MM: тогда число показывает, например "3"
дд для дня и гггг для года
Если вам нужны только две последние цифры, то yy .
Если вы меняете месяц и год первым и последним, то вам нужно изменить MMMM, dd и yyyy влево и вправо, например 03.12.2021 12:12 дд / ММ / ГГГГ ЧЧ: мм
Для 12-часового формата часов с суффиксом «AM» или «PM»:
DateFormat df = new SimpleDateFormat("KK:mm:ss a, dd/MM/yyyy", Locale.getDefault());
String currentDateAndTime = df.format(new Date());
Для 24-часовых часов с суффиксом «AM» или «PM»:
DateFormat df = new SimpleDateFormat("HH:mm:ss a, dd/MM/yyyy", Locale.getDefault());
String currentDateAndTime = df.format(new Date());
Чтобы удалить суффикс, просто удалите букву "a", записанную в формате времени.
Текущее время и дата в Android в формате
Calendar c = Calendar.getInstance();
System.out.println("Current dateTime => " + c.getTime());
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss a");
String formattedDate = df.format(c.getTime());
System.out.println("Format dateTime => " + formattedDate);
Вывод
I/System.out: Current dateTime => Wed Feb 26 02:58:17 GMT+05:30 2020
I/System.out: Format dateTime => 26-02-2020 02:58:17 AM
Вы можете получить местное время с GMT с помощью этой функции
public String getCurrentDate() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd hh:mm a zzz");
Date date = new Date();
sdf.setTimeZone(TimeZone.getTimeZone("GMT+6:00"));
return sdf.format(date);
}
Для текущей даты и времени с форматом используйте:
В 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, резервную копию java.time, современного API даты и времени Java.
Вы можете получить время и дату отдельно от Календаря.
// You can pass time zone and Local to getInstance() as parameter
Calendar calendar = Calendar.getInstance();
int currentHour = calendar.get(Calendar.HOUR_OF_DAY);
int currentMinute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int date = calendar.get(Calendar.DAY_OF_MONTH);
int month = calendar.get(Calendar.MONTH);
int year = calendar.get(Calendar.YEAR);
Котлин
Вот несколько способов получить текущую дату и время в Котлине.
fun main(args: Array<String>) {
println(System.currentTimeMillis()) // Current milliseconds
val date = Calendar.getInstance().time // Current date object
val date1 = Date(System.currentTimeMillis())
println(date.toString())
println(date1.toString())
val now = Time(System.currentTimeMillis()) // Current time object
println(now.toString())
val sdf = SimpleDateFormat("yyyy:MM:dd h:mm a", Locale.getDefault())
println(sdf.format(Date())) // Format current date
println(DateFormat.getDateTimeInstance().format(System.currentTimeMillis())) // using getDateTimeInstance()
println(LocalDateTime.now().toString()) // Java 8
println(ZonedDateTime.now().toString()) // Java 8
}
Вот несколько способов узнать время и дату:
public static void getCurrentTimeUsingDate() {
Date date = new Date();
String strDateFormat = "hh:mm:ss a";
DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
String formattedDate= dateFormat.format(date);
Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();
}
Время с использованием календаря
public static void getCurrentTimeUsingCalendar() {
Calendar cal = Calendar.getInstance();
Date date=cal.getTime();
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
String formattedDate=dateFormat.format(date);
Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();
}
Местное время и дата
public static void getCurrentTime(){
System.out.println("-----Current time of your time zone-----");
LocalTime time = LocalTime.now();
Toast.makeText(this, time, Toast.LENGTH_SHORT).show();
}
Зональное время
public static void getCurrentTimeWithTimeZone(){
Toast.makeText(this, "Current time of a different time zone using LocalTime", Toast.LENGTH_SHORT).show();
ZoneId zoneId = ZoneId.of("America/Los_Angeles");
LocalTime localTime=LocalTime.now(zoneId);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
String formattedTime=localTime.format(formatter);
Toast.makeText(this,formattedTime , Toast.LENGTH_SHORT).show();
}
Простой способ узнать текущее время и дату
import java.util.Calendar
Date currentTime = Calendar.getInstance().getTime();
//currentTimeMillis is System.currentTimeMillis()
long totalSeconds = currentTimeMillis / 1000;
int currentSecond = (int)totalSeconds % 60;
long totalMinutes = totalSeconds / 60;
int currentMinute = (int)totalMinutes % 60;
long totalHours = totalMinutes / 60;
int currentHour = (int)totalHours % 12;
TextView tvTime = findViewById(R.id.tvTime);
tvTime.setText((currentHour + OR - TIME YOU ARE FROM GMT) + ":" + currentMinute + ":" + currentSecond);
Как получить текущее время и дату?
отредактировал код .. не объяснил, что это currentTimeMillis
Ну, у меня были проблемы с некоторыми ответами 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
Приведенный ниже метод вернет текущую дату и время в виде строки. Используйте другой часовой пояс в соответствии с вашим фактическим часовым поясом. Я использовал 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);
}
В пакете com.google.gson.internal.bind.util есть класс утилит ISO8601Utils , поэтому, если вы <22> Gson, вы можно использовать это.
Он поддерживает миллисекунды и часовые пояса, так что это довольно хороший вариант прямо из коробки.
Это метод, который будет полезен для получения даты и времени:
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 SimpleDateFormat
и 2 Date
... не можете ли вы просто использовать "yyyy/MM/dd HH:mm"
в качестве формата и вызвать календарь один раз?
Если вам нужна текущая дата:
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));
Вы можете просто использовать следующий код:
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());
Попробуйте использовать следующий код:
Date date = new Date();
SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());
String currentDate = dateFormatWithZone.format(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
Хотя и другие ответы верны. Мне понравился этот ответ, так как он помогает и связанным со временем проблемам. Спасибо @Vighnesh KM
tl; dr
Instant.now() // Current moment in UTC.
… или…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Подробности
Остальные ответы, хотя и верны, устарели. Старые классы даты и времени оказались плохо спроектированными, запутанными и хлопотными.
java.time
Эти старые классы были заменены структурой java.time.
- Java 8 и более поздние версии: фреймворк java.time встроен.
- Java 7 и 6: используйте бэкпорт java.time.
- Android: используйте эту упакованную версию этого резервного порта.
Эти новые классы созданы на основе очень успешного проекта Joda-Time, определенного JSR 310 и расширенного проектом ThreeTen-Extra <96829056
>См. Учебник Oracle.
Instant
Примените часовой пояс ( Используйте собственные имена часовых поясов в формате Вы можете легко сгенерировать Вы можете вызвать методы 2016-03-23T03: 09: 01.613Z Обратите внимание, что для 2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles] Или укажите свой собственный шаблон форматирования с помощью класса Укажите А еще лучше, пусть java.time выполнит работу по локализации автоматически. Фреймворк java.time встроен в Java 8 и новее. Эти классы заменяют проблемные старые унаследованные классы даты и времени, такие как Чтобы узнать больше, см. Учебник Oracle . И поищите в Stack Overflow множество примеров и объяснений. Спецификация: JSR 310. Проект Joda-Time , теперь в режиме обслуживания, советует переходить на классы <8382905637637832>
Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в классах Где можно получить классы java.time? Instant
- это момент на временной шкале в UTC с разрешением до наносекунды <96829056377>.
Instant instant = Instant.now(); // Current moment in UTC.
Часовой пояс
ZoneId
), чтобы получить ZonedDateTime
. Если вы опускаете часовой пояс, текущий часовой пояс JVM по умолчанию применяется неявно. Лучше явно указать желаемый / ожидаемый часовой пояс. continent/region
, например, America/Montreal
, , <968375690>, , <9682905690> или , <9682905690>. Никогда не используйте сокращения из 3-4 букв, такие как EST
или IST
, поскольку они не являются ни стандартизированными, ни уникальными. ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Создание строк
String
как текстовое представление значения даты и времени. Вы можете выбрать стандартный формат, свой собственный формат или автоматически локализованный формат. ISO 8601
toString
для форматирования текста с использованием общепринятого и разумного стандарта ISO 8601. String output = instant.toString();
ZonedDateTime
метод toString
расширяет стандарт ISO 8601, добавляя имя часового пояса в квадратных скобках. Чрезвычайно полезная и важная информация, но не стандартная.
Пользовательский формат
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 );
Локализация
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) ); // Or Locale.CANADA_FRENCH and so on.
О java.time
java.util.Date
, Calendar
<14682905637812> Calendar
<146829037956>. java.sql.*
. Поддержка Hibernate 5 и JPA 2.2 java.time .
- Java 9 содержит некоторые незначительные функции и исправления.
- Большая часть функций java.time обратно перенесена на Java 6 и 7 в ThreeTen-Backport <56> <56> >
- Более поздние версии Android (26+) объединяют реализации классов java.time .
- Для более ранней версии Android (<26), процесс обессахаривания API обеспечивает подмножество функций <9372905637912> <9382901456_time> изначально встроен в Android.
- Если десугаринг не предлагает то, что вам нужно, проект ThreeTenABP <968290 Three5637922> назад <96837290>
@ giraffe.guru Перечитайте мой ответ. Вы пропустили третью пулю. Большая часть функциональных возможностей java.time перенесена на Java 6 и 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP.
Instant.now()
и ZonedDateTime.now()
требуется API 26
@Ryde Как я сказал giraffe.guru, перечитайте мой ответ. Ищите третий пункт, в котором упоминается «Android».
Я считаю, что вы правы: ваша новая таблица редакции java.time передает сообщение более прямо и легко, чем маркированный список. Если бы это был я, я бы немного усложнил ситуацию и поставил галочку в скобках (или что-то подобное) под ThreeTenBackport / Java 8+, а также под ThreeTenABP / Android 26+, поскольку эти комбинации действительно работают, только нет Обычно нет никакого смысла в их использовании. Разрабатываются приложения для Android, которые используют ThreeTenABP и нацелены на ряд уровней Android API как выше, так и ниже уровня 26. Мне кажется, что разработчики делают правильный выбор в этих случаях.
@ OleV.V. Благодарим вас за то, что вы предложили вторую галочку в графической таблице. Я использовал это в более поздних версиях таблицы. Намного улучшилось.
String DataString = DateFormat.getDateInstance(DateFormat.SHORT).format(Calendar.getInstance().getTime());
Чтобы получить строку в формате краткой даты в локализованном формате устройства.
Я не могу понять, почему так много ответов используют жестко заданные форматы даты и времени, когда OS / Java обеспечивает правильную локализацию даты и времени. Не лучше ли всегда использовать форматы устройства, чем программатора?
Он также обеспечивает чтение дат в локализованных форматах:
DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
Date date = null;
try {
date = format.parse(DateString);
}
catch(ParseException e) {
}
Затем пользователь, а не вы, устанавливает формат для отображения даты и времени. Независимо от языков и т. Д. В разных странах используются разные форматы с одним и тем же языком.
Попробовать
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
Это идеальный цельный вкладыш и элегантное решение. Это все, что нужно, а не излишне длинные решения, как в других ответах.
Класс java.util.Date устарел в 1997 году.
Попробуйте следующим образом. Все форматы приведены ниже, чтобы получить форматы даты и времени.
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);
Для настраиваемого формата времени и даты:
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 устарел в 1997 году.
Попробуйте этот код. Отображает текущую дату и время.
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
Locale.ENGLISH);
String var = dateFormat.format(date));
Вы уверены? Класс Date устарел в 1997 году.
Вы должны использовать класс 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);
Да, класс Date устарел в 1997 году.
Вы можете использовать код:
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
, теперь <222592401>, поддерживаются прежними > java.time классы, встроенные в Java 8 и новее. См. Учебник от Oracle.
Вы можете получить дату, используя:
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");
Это даст вам результат в красивой форме, как в этом примере: «2014/02/09».
Конструктор без параметров Time t = new Time();
будет использовать часовой пояс по умолчанию. По моему опыту, default == current.
Для тех, кто предпочитает индивидуальный формат, вы можете использовать:
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
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Этот , кажется, работает - «Выделяет объект Date и инициализирует его так, чтобы он представлял время, в которое он был выделен, с точностью до миллисекунды». . Но почему этого не было в предыдущих 16 ответах за более чем 2 года? Это кажется слишком простым. Это действительно работает на Android? Стало ли оно доступно в более поздней версии Android?
Другой ответ гласит: «Класс Date устарел <148046584001491> сейчас. В комментарии говорится: «Вам следует использовать Calendar или GregorianCalendar. Класс Date устарел». .
В документации для getDate, getHours и т. Д. Говорится, что «Устарело». <5331542067 Например. «Начиная с версии 1.1 JDK, заменено Calendar.get (Calendar.HOUR_OF_DAY).» . Версия 1.1 JDK была выпущена *** февраля 1997 г. *** (!!!) - устарела в течение 16 лет, когда был опубликован этот ответ.
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);
Использование:
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour + ":" + time.minute);
Это даст вам, например, «12:32».
Не забудьте import android.text.format.Time;
.
Легко. Вы можете проанализировать время, чтобы получить отдельные значения для текущего времени, как показано ниже:
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 Для этого вы используете Date
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);
Это только половина ответа. Возник вопрос: «Как мне узнать текущее время и дату?»
Для текущей даты и времени используйте:
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Какие выходы:
Feb 27, 2012 5:41:23 PM
я получил текущую дату, день и время системы, но время не меняется. я хочу увеличить время секунды на секунды. как я могу сделать?
Это рекомендуемый способ сделать это согласно Android API: developer.android.com/reference/java/text/… Спасибо!
На самом деле, безопаснее установить текущий часовой пояс, установленный на устройстве, с помощью 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.
Время из какого пакета нужно импортировать?
Этот класс объявлен устаревшим на уровне API 22. Вместо этого мы можем использовать GregorianCalendar.
Если вы хотите получить дату и время по определенному шаблону, вы можете использовать следующее:
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());
Остерегайтесь, SimpleDateFormat может быть проблематичным, если проблема с производительностью. В моем приложении у меня было настраиваемое представление, в котором было около 20 меток HH: MM, которые представляли определенное время (длинные целые числа, содержащие миллисекунды), и такое же количество доступных ресурсов. Первоначальное тестирование показало, что взаимодействие было не таким плавным, как я хотел. Когда я профилировал onDraw (), я обнаружил, что вызовы SimpleTimeFormatter занимают 80% времени. Фактически, я читаю эту страницу в поисках более эффективного средства форматирования, а также чтобы узнать больше о календарях и т. Д.
@ Уильям Т. Маллард: Вы создавали новый экземпляр SimpleDateFormat
внутри onDraw()
??
Да, но уже нет. Я не осознавал связанных с этим накладных расходов и предполагал, что это в значительной степени POJO.
Вкратце: String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
вы можете вставить sdf.setTimeZone(TimeZone.getDefault())
посередине
Еще лучше SimpleDateFormat ("ЧЧ: мм: сс дд / ММ / гггг") .format (Date ()) Результат: 11:26:16 26.05.2020
Чтобы узнать текущее время, вы можете использовать System.currentTimeMillis()
, который является стандартным в Java. Затем вы можете использовать его для создания даты
Date currentDate = new Date(System.currentTimeMillis());
И, как упоминалось другими, для создания времени
Time currentTime = new Time();
currentTime.setToNow();
Нет необходимости в System.currentTimeMillis()
; просто new Date()
делает то же самое.
@Jonik Cannot resolve constructor Date()
в Android Android SDK использует смесь Java 6 и 7.
@mghhgm Нет, new Date(System.currentTimeMillis())
неверно: (а) это избыточно, так как это то же самое, что и new Date()
. (b) проблемный класс java.util.Date
теперь заменен классом java.time.Instant
в Java 8 и более поздних версиях. Обратный перенос на Java 6 и 7 в проекте ThreeTen-Backport и на более раннюю версию Android (<26) в ThreeTenABP .
Вы также можете использовать android.os.SystemClock. Например, SystemClock.elapsedRealtime () даст вам более точные показания времени, когда телефон спит.
Есть несколько вариантов, так как 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
устарел.
Спасибо, дружище :) Я даже не догадывался об этом
Согласно справочной документации Date () (developer.android.com/reference/java/util/Date.html), ничего не говорится об устаревшем классе Date (), однако некоторые методы и конструкторы являются устаревшими. устарело.
Это приведет к неверному результату с точки зрения текущих пользовательских настроек (например, формата времени 12/24). Используйте android.text.format.DateFormat.getTimeFormat (контекст контекста), чтобы получить DateFormat для текущих пользовательских настроек.
@Zac, вы правы, даже метод getTime Date еще более полезен
Вы можете (, но больше не должно - см. Ниже!) Использовать 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
.
@InsanityOnABun и Мухаммад Бабар. Нет нет нет. Документы говорят, что "указано со второй точностью" Даже самый простой тест (получение текущего времени в цикле, toMillis и регистрация / печать результата) показал бы вам, что полученное время имеет миллисекунду 000!
@IgorZelaya Если вам нужна точность в миллисекундах, вы, вероятно, используете интервальную синхронизацию , а не время суток. В документации по Android рекомендуется использовать SystemClock.uptimeMillis()
для интервального времени. Так как это то, что используется большинством встроенных функций, есть сильная мотивация для его хорошей реализации на всех устройствах. См. Обсуждение в SystemClock ... Если вы хотите соотнести это со временем дня, в приложении onResume прочтите это и Time / setToNow / toMillis. Помните разницу между ними.
Не используйте класс времени. В будущем он будет удален, и у него много проблем.
> Этот класс объявлен устаревшим на уровне API 22. Используйте вместо него GregorianCalendar. См. здесь
Фактически, GregorianCalendar
был вытеснен несколько лет назад в Java и более поздних версиях Android классами java.time , в частности ZonedDateTime
. Для более ранних версий Android см. Проекты ThreeTen-Backport и ThreeTenABP .
43 ответа! Хотя многие из них были хороши, когда были написаны, хороший ответ для использования в 2018 году здесь.