Получить текущее время и дату на Android

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

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

    import java.util.Calendar Date currentTime = Calendar.getInstance().getTime(); 

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

    Редактировать:
    Проверка документации classа календаря

    Вы можете ( но больше не нужно – см. Ниже!) Использовать android.text.format.Time :

     Time now = new Time(); now.setToNow(); 

    Из ссылки, приведенной выше:

    Класс Time – это более быстрая замена classов java.util.Calendar и java.util.GregorianCalendar. Экземпляр classа Time представляет собой момент времени, указанный со второй точностью.


    ПРИМЕЧАНИЕ 1. Прошло несколько лет с тех пор, как я написал этот ответ, и речь идет о старом, специфичном для Android и теперь устаревшем classе. Google теперь говорит, что «[t] его class имеет ряд проблем, и рекомендуется использовать GregorianCalendar ».


    ПРИМЕЧАНИЕ 2. Хотя class 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 начнет повторяться.

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

     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); String currentDateandTime = sdf.format(new Date()); 

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

     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 говорит, что этот class имеет ряд проблем и больше не предполагается использовать:

    У этого classа есть ряд проблем, и вместо этого рекомендуется использовать GregorianCalendar.

    Известные вопросы:

    По историческим причинам при выполнении вычислений времени вся арифметика в настоящее время выполняется с использованием 32-битных целых чисел. Это ограничивает надежный временной диапазон, представляемый с 1902 года по 2037 год. См. Статью в Википедии по проблеме 2038 года. Не полагайтесь на это поведение; он может измениться в будущем. Вызов switchTimezone (String) на дату, которая не может существовать, например, время стены, которое было пропущено из-за перехода на летнее время, приведет к дате в 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 

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

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

    первый

    второй в третьих

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

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

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

     Time currentTime = new Time(); currentTime.setToNow(); 

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

     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 .

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

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

    ТЛ; др

     Instant.now() // Current moment in UTC. 

    …или…

     ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone 

    Детали

    Другие ответы, хотя и правильные, устарели. Старые classы времени-времени оказались плохо спроектированными, запутанными и сложными.

    java.time

    Эти старые classы были заменены рамкой java.time .

    • Java 8 и более поздние версии: фреймворк java.time встроен.
    • Java 7 и 6: используйте обратный путь java.time .
    • Android: используйте эту завернутую версию этого backport .

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

    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 [Америка / Los_Angeles]

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

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

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

    Укажите язык для человеческого языка (английский, французский и т. Д.), Чтобы использовать при переводе названия дня / месяца, а также в определении культурных норм, таких как порядок года, месяца и даты. Обратите внимание, что 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 и более поздние версии . Эти classы вытесняют неприятные старые устаревшие classы времени, такие как java.util.Date , Calendar и SimpleDateFormat .

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

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

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

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

    • Java SE 8 , Java SE 9 , Java SE 10 и более поздние версии
      • Встроенный.
      • Часть стандартного Java API с интегрированной реализацией.
      • Java 9 добавляет некоторые незначительные функции и исправления.
    • Java SE 6 и Java SE 7
      • Большая часть функциональных возможностей java.time включена обратно в Java 6 и 7 в ThreeTen-Backport .
    • Android
      • Более поздние версии реализаций пакетов Android classов java.time.
      • Для более ранних Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). См. Раздел Как использовать ThreeTenABP ….

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

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

     String currentDateTimeString = DateFormat.getDateInstance().format(new Date()); // textView is the TextView view that should display it textView.setText(currentDateTimeString); 
     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 (eg 12 or 2012). Use either yy or yyyy. M Month in year. Number of M's determine length of format (eg MM, MMM or MMMMM) d Day in month. Number of d's determine length of format (eg 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 (eg Monday, Tuesday etc.) D Day in year (1-366) F Day of week in month (eg 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); 

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

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

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

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

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

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

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

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

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

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

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

     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 )); 
     Date todayDate = new Date(); todayDate.getDay(); todayDate.getHours(); todayDate.getMinutes(); todayDate.getMonth(); todayDate.getTime(); 
     Time now = new Time(); now.setToNow(); 

    Попробуйте это для меня тоже.

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

      DateFormat df = new SimpleDateFormat("HH:mm"); //format time String time = df.format(Calendar.getInstance().getTime()); DateFormat df1=new SimpleDateFormat("yyyy/MM/dd");//foramt date String date=df1.format(Calendar.getInstance().getTime()); 

    Попробуй это

     String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString()); 

    Ниже метод вернет текущую дату и время в String. Используйте другой часовой пояс в соответствии с вашим текущим часовым поясом. Я использовал 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); } 

    Вы должны использовать class 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 date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa", Locale.ENGLISH); String var = dateFormat.format(date)); 

    Ну, у меня были проблемы с некоторыми ответами 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 PM – 2017/10/03

    попробуйте использовать ниже код:

      Date date = new Date(); SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault()); String currentDate = dateFormatWithZone.format(date); 
    Interesting Posts
    Давайте будем гением компьютера.