Получить текущее время и дату на Android - PullRequest
1005 голосов
/ 20 марта 2011

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

Ответы [ 37 ]

32 голосов
/ 23 марта 2016

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 .

См. Руководство по Oracle .

Instant

An 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как текстовое представление значения даты и времени.Вы можете использовать стандартный формат, свой собственный пользовательский формат или автоматически локализованный формат.

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, & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

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

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

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

24 голосов
/ 20 марта 2011

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

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

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
22 голосов
/ 06 июля 2016
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
16 голосов
/ 21 октября 2012
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);
13 голосов
/ 09 мая 2017

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

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
12 голосов
/ 24 апреля 2013
    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 голосов
/ 18 марта 2013
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

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

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

11 голосов
/ 09 августа 2011

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

9 голосов
/ 01 февраля 2017

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

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 голосов
/ 18 июня 2015

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

    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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...