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

avatar
M7M
20 марта 2011 в 16:12
1588322
42
1191

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

Источник
Ole V.V.
26 сентября 2018 в 12:11
7

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

Ответы (42)

avatar
user658042
20 марта 2011 в 16:27
1428

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

import java.util.Calendar

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

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

Проверьте документацию по классу Calendar.

Bill Mote
6 апреля 2011 в 14:50
14

+1 Это было очень полезно. Поскольку мы новичок, это все эти маленькие лакомые кусочки, которые нам нужны ... Я использую Календарь, чтобы получить дату по юлианскому календарю. Намного проще, чем получить миллисекунды и выяснить, равно ли значение сегодняшнему;)

Kyle Clegg
17 мая 2012 в 20:29
9

Но откуда это берет дату и время? Сама настройка андроид устройства?

user658042
20 мая 2012 в 12:21
12

@Kyle Да, это основано на настройках времени / часового пояса устройства. Цитата из документа: «Метод getInstance календаря возвращает календарь, языковой стандарт которого основан на системных настройках и чьи поля времени были инициализированы текущими датой и временем» - (над первой строкой кода примера в документации класса).

adamdport
23 апреля 2015 в 19:20
3

Это просто дает мне текущую секунду, от 0 до 60. Что-то изменилось за последние пару лет?

akousmata
11 мая 2015 в 13:23
47

Как говорит @adamdport, это на самом деле не отвечает на вопрос ... Calendar.getInstance().getTime() или Calendar.getInstance().getTimeInMillis() будут работать.

Rahul
1 сентября 2017 в 21:04
0

можем ли мы использовать класс и формат «new Date ()» с классом SimpleDateFormat?

Basil Bourque
20 января 2018 в 08:00
2

К вашему сведению, неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь унаследованы, заменены классами java.time. Большая часть функциональных возможностей java.time перенесена на Java 6 и Java 7 в проекте ThreeTen-Backport . Дальнейшая адаптация для более ранних версий Android в проекте ThreeTenABP . См. Как использовать ThreeTenABP… .

nikhil123
28 мая 2020 в 09:36
0

отлично, это было действительно полезно, вы классные, самое главное, спасибо!

Max Shwed
2 июля 2020 в 14:01
0

Сейчас этот метод устарел. В документах вы можете найти новое решение: Calendar.getInstance (). Get (Calendar.HOUR_OF_DAY), если вам нужно получить единственный час, или Calendar.getInstance (). Get (Calendar.MINUTE) и т. Д.

Sam
27 октября 2020 в 08:05
0

Кто-нибудь знает, как это сравнивается с new Date()?

avatar
Ayaz khan
21 августа 2021 в 18:41
0

Попробуйте это, чтобы легко получить текущую дату и время:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
String currentDateandTime = sdf.format(new Date());

Enter image description here

avatar
Safal Bhatia
25 марта 2021 в 09:05
0

Вы можете получить текущую дату и время с помощью этого кода:

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 дд / ММ / ГГГГ ЧЧ: мм

avatar
PRANAV SINGH
7 ноября 2020 в 15:33
1

Для 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", записанную в формате времени.

avatar
Aftab Alam
25 февраля 2020 в 21:32
5

Текущее время и дата в 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
avatar
pavel
22 июля 2019 в 11:06
1

Вы можете получить местное время с 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);
}
avatar
Vipul Prajapati
13 июня 2019 в 04:02
16

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

В 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
Ole V.V.
13 июня 2019 в 08:59
1

Спасибо за желание внести свой вклад. Вы вносите что-то, чего еще не было в предыдущих 36 ответах? В любом случае вы все еще используете заведомо проблемный и давно устаревший класс SimpleDateFormat. Даже до Oreo в этом нет необходимости, вместо этого вы можете использовать ThreeTenABP, резервную копию java.time, современного API даты и времени Java.

avatar
Sheikh Hasib
16 апреля 2019 в 08:56
1

Вы можете получить время и дату отдельно от Календаря.

// 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);
avatar
Khemraj Sharma
1 октября 2018 в 10:35
2

Котлин

Вот несколько способов получить текущую дату и время в Котлине.

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
}
avatar
Pradeep Sheoran
26 сентября 2018 в 11:19
2

Вот несколько способов узнать время и дату:

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();
avatar
Oush
12 января 2018 в 12:57
2
    //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);
Peter Mortensen
21 августа 2021 в 19:22
0

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

Oush
22 августа 2021 в 09:46
0

отредактировал код .. не объяснил, что это currentTimeMillis

avatar
Charlie
3 октября 2017 в 20:32
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 PM - 2017/10/03
avatar
Danger
25 июля 2017 в 11:48
4

Приведенный ниже метод вернет текущую дату и время в виде строки. Используйте другой часовой пояс в соответствии с вашим фактическим часовым поясом. Я использовал 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);
}
avatar
Filip Marusca
16 июня 2017 в 06:56
1

В пакете com.google.gson.internal.bind.util есть класс утилит ISO8601Utils , поэтому, если вы <22> Gson, вы можно использовать это.

Он поддерживает миллисекунды и часовые пояса, так что это довольно хороший вариант прямо из коробки.

avatar
Jorgesys
9 мая 2017 в 19:41
16

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

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
charles-allen
23 ноября 2017 в 10:31
0

Мне не нравится тесная связь логики представления и логики процесса; Я бы предпочел метод, который просто выполняет форматирование и принимает параметр ввода даты. Я также не понимаю, почему вы используете 2 SimpleDateFormat и 2 Date ... не можете ли вы просто использовать "yyyy/MM/dd HH:mm" в качестве формата и вызвать календарь один раз?

avatar
RejoylinLokeshwaran
1 февраля 2017 в 13:18
13

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

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));
avatar
Ali Ziaee
6 января 2017 в 14:05
10

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

 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());
avatar
Manikandan K
19 сентября 2016 в 12:14
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);
avatar
Vignesh KM
6 июля 2016 в 09:27
25
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
Ankit Gupta
4 октября 2016 в 12:56
1

Хотя и другие ответы верны. Мне понравился этот ответ, так как он помогает и связанным со временем проблемам. Спасибо @Vighnesh KM

avatar
Basil Bourque
23 марта 2016 в 02:49
75

tl; dr

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 <96829056

>

См. Учебник Oracle.

Instant

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

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

Создание строк

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

ISO 8601

Вы можете вызвать методы toString для форматирования текста с использованием общепринятого и разумного стандарта ISO 8601.

String output = instant.toString();

2016-03-23T03: 09: 01.613Z

Обратите внимание, что для ZonedDateTime метод toString расширяет стандарт ISO 8601, добавляя имя часового пояса в квадратных скобках. Чрезвычайно полезная и важная информация, но не стандартная.

2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]

Пользовательский формат

Или укажите свой собственный шаблон форматирования с помощью класса DateTimeFormatter.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

Укажите Locale для человеческого языка (английский, французский и т. Д.), Чтобы использовать его при переводе названия дня / месяца, а также при определении культурных норм, таких как порядок года, месяца и числа. Обратите внимание, что Locale не имеет ничего общего с часовым поясом.

formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

Локализация

А еще лучше, пусть 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 <14682905637812> Calendar <146829037956>.

Чтобы узнать больше, см. Учебник Oracle . И поищите в Stack Overflow множество примеров и объяснений. Спецификация: JSR 310.

Проект Joda-Time , теперь в режиме обслуживания, советует переходить на классы <8382905637637832>

Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в классах java.sql.*. Поддержка Hibernate 5 и JPA 2.2 java.time .

Где можно получить классы java.time?

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

Basil Bourque
25 июня 2016 в 05:38
2

@ giraffe.guru Перечитайте мой ответ. Вы пропустили третью пулю. Большая часть функциональных возможностей java.time перенесена на Java 6 и 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP.

Ryde
12 августа 2018 в 23:13
0

Instant.now() и ZonedDateTime.now() требуется API 26

Basil Bourque
13 августа 2018 в 01:00
2

@Ryde Как я сказал giraffe.guru, перечитайте мой ответ. Ищите третий пункт, в котором упоминается «Android».

Ole V.V.
29 сентября 2019 в 11:52
0

Я считаю, что вы правы: ваша новая таблица редакции java.time передает сообщение более прямо и легко, чем маркированный список. Если бы это был я, я бы немного усложнил ситуацию и поставил галочку в скобках (или что-то подобное) под ThreeTenBackport / Java 8+, а также под ThreeTenABP / Android 26+, поскольку эти комбинации действительно работают, только нет Обычно нет никакого смысла в их использовании. Разрабатываются приложения для Android, которые используют ThreeTenABP и нацелены на ряд уровней Android API как выше, так и ниже уровня 26. Мне кажется, что разработчики делают правильный выбор в этих случаях.

Basil Bourque
28 мая 2020 в 15:20
1

@ OleV.V. Благодарим вас за то, что вы предложили вторую галочку в графической таблице. Я использовал это в более поздних версиях таблицы. Намного улучшилось.

avatar
Jan Bergström
29 февраля 2016 в 05:01
2
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) {
    }

Затем пользователь, а не вы, устанавливает формат для отображения даты и времени. Независимо от языков и т. Д. В разных странах используются разные форматы с одним и тем же языком.

avatar
Abhinaw Kumar
23 февраля 2016 в 14:02
5

Попробовать

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
zeeshan
21 ноября 2019 в 19:12
0

Это идеальный цельный вкладыш и элегантное решение. Это все, что нужно, а не излишне длинные решения, как в других ответах.

Peter Mortensen
21 августа 2021 в 19:01
1

Класс java.util.Date устарел в 1997 году.

avatar
Amitsharma
17 декабря 2015 в 06:58
62

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

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

First

Second

Third

avatar
Omar Faroque Anik
18 июня 2015 в 15:20
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

Peter Mortensen
21 августа 2021 в 18:59
0

Класс Date устарел в 1997 году.

avatar
Kinjal
25 мая 2015 в 08:58
3

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

 Date date = new Date(System.currentTimeMillis());
 SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
                         Locale.ENGLISH);
 String var = dateFormat.format(date));
Peter Mortensen
21 августа 2021 в 18:57
0

Вы уверены? Класс Date устарел в 1997 году.

avatar
Akshay Paliwal
4 февраля 2015 в 07:28
4

Вы должны использовать класс 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);
Peter Mortensen
21 августа 2021 в 18:55
0

Да, класс Date устарел в 1997 году.

avatar
Himanshu Aggarwal
10 ноября 2014 в 19:10
38

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

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

Basil Bourque
23 июня 2018 в 03:30
0

К вашему сведению, проблемные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь <222592401>, поддерживаются прежними > java.time классы, встроенные в Java 8 и новее. См. Учебник от Oracle.

avatar
Annabelle
9 февраля 2014 в 11:02
8

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

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

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

William T. Mallard
16 февраля 2014 в 23:44
0

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

avatar
ANemati
18 декабря 2013 в 02:42
244

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

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
avatar
Muhammad Aamir Ali
16 июля 2013 в 09:02
6
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Peter Mortensen
21 августа 2021 в 18:31
0

Этот , кажется, работает - «Выделяет объект Date и инициализирует его так, чтобы он представлял время, в которое он был выделен, с точностью до миллисекунды». . Но почему этого не было в предыдущих 16 ответах за более чем 2 года? Это кажется слишком простым. Это действительно работает на Android? Стало ли оно доступно в более поздней версии Android?

Peter Mortensen
21 августа 2021 в 18:38
1

Другой ответ гласит: «Класс Date устарел <148046584001491> сейчас. В комментарии говорится: «Вам следует использовать Calendar или GregorianCalendar. Класс Date устарел». .

Peter Mortensen
21 августа 2021 в 18:42
2

В документации для getDate, getHours и т. Д. Говорится, что «Устарело». <5331542067 Например. «Начиная с версии 1.1 JDK, заменено Calendar.get (Calendar.HOUR_OF_DAY).» . Версия 1.1 JDK была выпущена *** февраля 1997 г. *** (!!!) - устарела в течение 16 лет, когда был опубликован этот ответ.

avatar
duggu
24 апреля 2013 в 09:32
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);
avatar
Sam Haque
18 марта 2013 в 12:31
12

Использование:

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

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

Не забудьте import android.text.format.Time;.

avatar
TheMan
17 февраля 2013 в 06:01
8
Time now = new Time();
now.setToNow();

Попробуйте, у меня тоже работает.

avatar
SkateJerrySkate
13 ноября 2012 в 16:11
33

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

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);
CoDe
6 сентября 2013 в 15:23
0

как получить дату на следующие 5-10 дней .. это ручной расчет здесь?

FindOutIslamNow
8 сентября 2018 в 12:38
0

@CoDe Для этого вы используете Date

avatar
Alex Muriithi
20 октября 2012 в 21:17
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);
Peter Mortensen
21 августа 2021 в 19:28
0

Это только половина ответа. Возник вопрос: «Как мне узнать текущее время и дату?»

avatar
Kirit
27 февраля 2012 в 12:16
83

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

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

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

Feb 27, 2012 5:41:23 PM
Bhavesh Hirpara
1 октября 2012 в 06:23
0

я получил текущую дату, день и время системы, но время не меняется. я хочу увеличить время секунды на секунды. как я могу сделать?

M Granja
7 августа 2013 в 11:05
3

Это рекомендуемый способ сделать это согласно Android API: developer.android.com/reference/java/text/… Спасибо!

avatar
kaneda
11 февраля 2012 в 14:02
128

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

Время из какого пакета нужно импортировать?

Choletski
14 декабря 2015 в 08:29
0

Этот класс объявлен устаревшим на уровне API 22. Вместо этого мы можем использовать GregorianCalendar.

avatar
Miciurash
18 января 2012 в 17:44
411

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

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());
William T. Mallard
22 июля 2013 в 05:15
10

Остерегайтесь, SimpleDateFormat может быть проблематичным, если проблема с производительностью. В моем приложении у меня было настраиваемое представление, в котором было около 20 меток HH: MM, которые представляли определенное время (длинные целые числа, содержащие миллисекунды), и такое же количество доступных ресурсов. Первоначальное тестирование показало, что взаимодействие было не таким плавным, как я хотел. Когда я профилировал onDraw (), я обнаружил, что вызовы SimpleTimeFormatter занимают 80% времени. Фактически, я читаю эту страницу в поисках более эффективного средства форматирования, а также чтобы узнать больше о календарях и т. Д.

xmen
8 января 2014 в 04:00
0

@ Уильям Т. Маллард: Вы создавали новый экземпляр SimpleDateFormat внутри onDraw() ??

William T. Mallard
8 января 2014 в 16:49
3

Да, но уже нет. Я не осознавал связанных с этим накладных расходов и предполагал, что это в значительной степени POJO.

Pratik Butani
7 марта 2014 в 12:02
34

Вкратце: String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());

Harvey
21 июля 2015 в 20:55
4

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

Hitesh Sahu
26 мая 2020 в 09:26
0

Еще лучше SimpleDateFormat ("ЧЧ: мм: сс дд / ММ / гггг") .format (Date ()) Результат: 11:26:16 26.05.2020

avatar
JosephL
25 октября 2011 в 23:07
56

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

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

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

Time currentTime = new Time();
currentTime.setToNow();
Jonik
27 декабря 2013 в 22:11
13

Нет необходимости в System.currentTimeMillis(); просто new Date() делает то же самое.

stephen
16 марта 2015 в 09:59
0

@Jonik Cannot resolve constructor Date() в Android Android SDK использует смесь Java 6 и 7.

Basil Bourque
23 июня 2018 в 03:28
0

@mghhgm Нет, new Date(System.currentTimeMillis()) неверно: (а) это избыточно, так как это то же самое, что и new Date(). (b) проблемный класс java.util.Date теперь заменен классом java.time.Instant в Java 8 и более поздних версиях. Обратный перенос на Java 6 и 7 в проекте ThreeTen-Backport и на более раннюю версию Android (<26) в ThreeTenABP .

avatar
Quadroid
9 августа 2011 в 12:13
11

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

avatar
dLobatog
20 марта 2011 в 16:20
30

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

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

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
Joseph Earl
20 марта 2011 в 16:22
8

Вы должны использовать Calendar или GregorianCalendar. Класс Date устарел.

dLobatog
20 марта 2011 в 16:44
0

Спасибо, дружище :) Я даже не догадывался об этом

Zac Seth
16 апреля 2011 в 18:40
12

Согласно справочной документации Date () (developer.android.com/reference/java/util/Date.html), ничего не говорится об устаревшем классе Date (), однако некоторые методы и конструкторы являются устаревшими. устарело.

wonder.mice
27 октября 2011 в 20:58
2

Это приведет к неверному результату с точки зрения текущих пользовательских настроек (например, формата времени 12/24). Используйте android.text.format.DateFormat.getTimeFormat (контекст контекста), чтобы получить DateFormat для текущих пользовательских настроек.

user2730944
6 сентября 2013 в 12:17
0

@Zac, вы правы, даже метод getTime Date еще более полезен

avatar
Thomas Padron-McCarthy
20 марта 2011 в 16:17
496

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

ToolmakerSteve
12 сентября 2014 в 17:34
2

@InsanityOnABun и Мухаммад Бабар. Нет нет нет. Документы говорят, что "указано со второй точностью" Даже самый простой тест (получение текущего времени в цикле, toMillis и регистрация / печать результата) показал бы вам, что полученное время имеет миллисекунду 000!

ToolmakerSteve
12 сентября 2014 в 19:08
3

@IgorZelaya Если вам нужна точность в миллисекундах, вы, вероятно, используете интервальную синхронизацию , а не время суток. В документации по Android рекомендуется использовать SystemClock.uptimeMillis() для интервального времени. Так как это то, что используется большинством встроенных функций, есть сильная мотивация для его хорошей реализации на всех устройствах. См. Обсуждение в SystemClock ... Если вы хотите соотнести это со временем дня, в приложении onResume прочтите это и Time / setToNow / toMillis. Помните разницу между ними.

Sandy Chapman
21 октября 2014 в 14:30
0

Не используйте класс времени. В будущем он будет удален, и у него много проблем.

Neo
28 июня 2015 в 03:05
1

> Этот класс объявлен устаревшим на уровне API 22. Используйте вместо него GregorianCalendar. См. здесь

Basil Bourque
2 мая 2018 в 18:20
0

Фактически, GregorianCalendar был вытеснен несколько лет назад в Java и более поздних версиях Android классами java.time , в частности ZonedDateTime. Для более ранних версий Android см. Проекты ThreeTen-Backport и ThreeTenABP .