- Получить текущее время и дату на Android
- ТЛ; др
- Детали
- java.time
- Instant
- Часовой пояс
- Создание строк
- ISO 8601
- Пользовательский формат
- Локализации
- О java.time
- How to Get Current Date and Time in Java
- Introduction
- System.currentTimeMillis()
- java.util.Date
- The Calendar API
- The Date/Time API
- LocalDate
- LocalTime
- Free eBook: Git Essentials
- LocalDateTime
- ZonedDateTime
- Clock
- Joda-Time
- Conclusion
Получить текущее время и дату на Android
Как получить текущее время и дату в приложении для Android?
Вы можете использовать:
В календаре есть много констант для всего, что вам нужно. Редактирование: документация по календарю
Вы можете ( но больше не нужно – см. Ниже!) Использовать android.text.format.Time :
Из ссылки, приведенной выше:
Класс Time – это более быстрая замена классов java.util.Calendar и java.util.GregorianCalendar. Экземпляр класса Time представляет собой момент времени, указанный со второй точностью.
ПРИМЕЧАНИЕ 1. Прошло несколько лет с тех пор, как я написал этот ответ, и речь идет о старом, специфичном для Android и теперь устаревшем классе. Google теперь говорит, что «[t] его класс имеет ряд проблем, и рекомендуется использовать GregorianCalendar ».
ПРИМЕЧАНИЕ 2. Хотя класс Time имеет toMillis(ignoreDaylightSavings) , это просто удобство перехода к методам, которые ожидают время в миллисекундах. Значение времени только точная до одной секунды ; Часть миллисекунд всегда равна 000 . Если в цикле вы делаете
Полученная последовательность повторит то же значение, например 1410543204000 , до следующей следующей секунды, и в это время 1410543205000 начнет повторяться.
Если вы хотите получить дату и время в определенном шаблоне, вы можете использовать следующее:
Для тех, кто предпочитает настраиваемый формат, вы можете использовать:
В то время как вы можете иметь шаблоны DateFormat, такие как:
На самом деле безопаснее устанавливать текущий часовой пояс на устройстве с помощью Time.getCurrentTimezone() , иначе вы получите текущее время в UTC.
Затем вы можете получить все поля даты, которые вы хотите, например:
См. Раздел android.text.format.Time для всех деталей.
ОБНОВИТЬ
Как многие люди указывают, Google говорит, что этот класс имеет ряд проблем и больше не должен использоваться:
У этого класса есть ряд проблем, поэтому рекомендуется использовать GregorianCalendar.
По историческим причинам при выполнении вычислений времени вся арифметика в настоящее время выполняется с использованием 32-битных целых чисел. Это ограничивает надежный временной диапазон, представляемый с 1902 года по 2037 год. Подробнее см. Статью в википедии о проблеме 2038 года. Не полагайтесь на это поведение; Он может измениться в будущем. Вызов switchTimezone (String) на дату, которая не может существовать, например, время стены, которое было пропущено из-за перехода на летнее время, приведет к дате в 1969 году (т.е. -1 или 1 секунде до 1 января 1970 UTC). Большая часть форматирования / синтаксического анализа предполагает текст ASCII и поэтому не подходит для использования с не-ASCII-скриптами.
Для текущей даты и времени используйте:
Чтобы указать текущее время, вы можете использовать System.currentTimeMillis() который является стандартным для Java. Затем вы можете использовать его для создания даты
И как упоминалось другими, чтобы создать время
Попробуйте таким образом. Все форматы приведены ниже, чтобы получить формат даты и времени.
Вы можете использовать код:
Здесь вы также можете получить дополнительные параметры форматирования для SimpleDateFormat .
Легко, вы можете проанализировать время, чтобы получить отдельные значения для текущего времени, а именно:
То же самое касается даты:
Существует несколько вариантов, поскольку Android – это в основном Java, но если вы хотите записать его в текстовом виде, следующий код будет делать трюк:
ТЛ; др
Детали
Остальные ответы, правда, устарели. Старые классы времени-времени оказались плохо спроектированными, запутанными и сложными.
java.time
Эти старые классы были заменены рамкой java.time .
- Java 8 и более поздние версии: фреймворк java.time встроен.
- Java 7 и 6: используйте обратный путь java.time .
- Android: используйте эту завернутую версию этого backport .
Эти новые классы вдохновлены очень успешным проектом Joda-Time , определенным JSR 310 , и расширенным проектом ThreeTen-Extra .
См. Учебник Oracle .
Instant
Instant – это момент на временной шкале в формате UTC с разрешением до наносекунд .
Часовой пояс
Примените часовой пояс ( ZoneId ), чтобы получить ZonedDateTime . Если вы опустите часовой пояс, ваш часовой пояс вашего JVM неявно применяется. Лучше указать явно желаемый / ожидаемый часовой пояс.
Используйте правильные названия часовых поясов в формате continent/region такие как America/Montreal , Europe/Brussels или Asia/Kolkata . Никогда не используйте аббревиатуры 3-4 букв, такие как EST или IST поскольку они не являются стандартизованными и не уникальными.
Создание строк
Вы можете легко создать String в качестве текстового представления значения даты и времени. Вы можете использовать стандартный формат, свой собственный формат или автоматически локализованный формат.
ISO 8601
Вы можете вызвать методы toString для форматирования текста с использованием общего и разумного стандарта ISO 8601 .
Обратите внимание, что для ZonedDateTime метод toString расширяет стандарт ISO 8601, добавляя имя часового пояса в квадратных скобках. Очень полезная и важная информация, но не стандартная.
2016-03-22T20: 09: 01.613-08: 00 [Америка / Los_Angeles]
Пользовательский формат
Или укажите свой собственный шаблон форматирования с классом DateTimeFormatter .
Укажите язык для человеческого языка (английский, французский и т. Д.), Чтобы использовать при переводе названия дня / месяца, а также в определении культурных норм, таких как порядок года и месяца и даты. Обратите внимание, что Locale имеет никакого отношения к часовому поясу.
Локализации
Еще лучше, пусть java.time выполняет работу по локализации автоматически.
О java.time
Рамка java.time встроена в Java 8 и более поздних версий . Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date , java.text.SimpleDateFormat и java.text.SimpleDateFormat .
Проект Joda-Time , теперь в режиме обслуживания , советует перейти на java.time.
Дополнительную информацию можно найти в учебнике Oracle . И поиск Stack Overflow для многих примеров и объяснений. Спецификация – JSR 310 .
Где получить классы java.time?
- Java SE 8 и SE 9 и более поздние версии
- Встроенный.
- Часть стандартного Java API с интегрированной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональных возможностей java.time портирована на Java 6 и 7 в ThreeTen-Backport .
- Android
- Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
- См. Как использовать ….
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval , YearWeek , YearQuarter и т . Д.
Форматы формата даты
Вы также можете использовать android.os.SystemClock. Например, SystemClock.elapsedRealtime () даст вам более точные показания времени, когда телефон спит.
Это даст вам, например, 12:32.
Не забудьте импортировать android.text.format.Time;
Вы можете получить дату, используя:
Это даст вам результат в хорошей форме, как в этом примере: «2014/02/09».
Для настроенного формата времени и даты:
Результат выглядит как ниже: 2015-06-18T10: 15: 56-05: 00
Попробуйте это для меня тоже.
Это метод, который будет полезен для получения даты и времени:
Вы можете вызвать этот метод и получить текущие значения даты и времени:
Вы можете просто использовать следующий код:
Вы должны использовать класс Calender в соответствии с новым API. Класс Date теперь устарел.
Попробуйте этот код, на котором отображаются текущие дата и время
Если вам нужна текущая дата,
Если вам нужно текущее время,
Попробуйте использовать ниже код:
Чтобы получить короткую форматированную по дате строку String в локализованном формате устройства.
Я не могу понять, почему так много ответов являются жестко заданными форматами даты и времени, когда OS / Java поставляет правильную локализацию Дат и времени? Разве лучше не использовать форматы устройства, а не программиста?
Он также обеспечивает чтение дат в локализованных форматах:
Тогда это зависит от пользователя, задающего формат, который показывает даты и время, а не вы? Независимо от языков и т. Д. В разных странах с разными языками существуют разные форматы.
В пакете com.google.gson.internal.bind.util есть класс ISO8601Utils utils, поэтому, если вы используете GSON в своем приложении, вы можете использовать его.
Он поддерживает миллисы и часовые пояса, поэтому это довольно хороший вариант прямо из коробки.
Источник
How to Get Current Date and Time in Java
Introduction
In this article, we’ll explore many ways to Get the Current Date and Time in Java. Most applications have the need for timestamping events or showing date/times, among many other use-cases:
- When we publish blogs on a website, the date of posting gets written down into a database and shown to the reader.
- When we make an action, we’d want to know the time of it to be available so that we can keep track of them.
- When we buy something online or make a transaction, our banks offer us the transaction list with the exact timestamps for us to review.
Long story short, getting the current date and time in Java is very important and has a myriad of usages, and thankfully, it’s really easy to attain it for any kind of use.
System.currentTimeMillis()
If you’d like to get a single numeric value of milliseconds passed since the UNIX epoch, it’s as easy as:
Printing this value out would result in something similar to this:
When converting this number back to a human-readable date, it represents:
And to do this in Java, we need only a couple of lines of code:
Running this piece of code would yield:
Note: Keep in mind that this method returns the current value depending on your system time.
java.util.Date
In Java, getting the current date is as simple as instantiating the Date object from the Java package java.util :
We can format this date easily:
And running this piece of code would yield:
The Calendar API
Amongst Java’s myriad of classes is the Calendar class, which is used to convert dates and time between specific instants and the calendar fields.
Getting the current date and time is really easy using a calendar:
Again, we can easily format this:
The getTime() method returns a Date object. Since SimpleDateFormat only works with Date objects, we’re calling the getTime() method of the Calendar class to format it.
Running this piece of code would yield:
The Date/Time API
Java 8 introduced us to a whole new API, which was included in the build to replace java.util.Date and java.util.Calendar .
It’s still useful to know how to get the current date and time using the previous two classes since not all applications have yet migrated to Java 8.
The Date/Time API provides multiple classes that we can rely on to get the job done:
LocalDate
LocalDate represents just a date, without time. This means that we can only get the current date, but without the time of the day:
This time around, instead of initializing a new object, we’re calling the static method now() which returns the current date according to the system clock, with the default time-zone.
We can format this object:
Running this piece of code would yield:
You can also pass a ZoneId to the method to retrieve the date based on the specified time-zone, instead of the default one:
You can get a list of all available time-zone ID’s via:
LocalTime
LocalTime is the opposite of LocalDate in that it represents only a time, without the date. This means that we can only get the current time of the day, without the actual date:
Free eBook: Git Essentials
Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!
We can easily format this object:
Running this piece of code would yield:
LocalDateTime
And finally, a LocalDateTime , the most used Date/Time class in Java, represents the combination of the previous two — holding the value of both the date and the time:
We can easily format this object:
Running this piece of code would yield:
ZonedDateTime
Alongside the previous classes, the ZonedDateTime class also offers this functionality:
We can easily format this object:
Running this piece of code would yield:
Clock
Another class introduced to us in the Java 8 Date/Time API is the Clock class. It provides access to the current Instant , LocalDate , LocalTime and LocalDateTime using a time-zone.
That being said, using a Clock , you practically instantiate all of those and can access the ones you’re interested in.
Through this object instance, we can instantiate many of the previously mentioned classes:
Note: It’s valid to ask why we’d use a Clock instead of just leaving the now() method empty. A Clock is optional and the now() method typically uses the system’s clock to determine the values. Though, through a clock you can have more than just your system’s clock if you wish so. In our example, it doesn’t make a difference, though.
Using the clock , we can extract an Instant :
Running this code would yield:
You can make a zoned Clock by passing a ZoneId to to Clock.system() :
Printing the value of the Instant belonging to clock would yield:
And finally, using a Clock , via the millis() method, you can access the millisecond value of the clock, which is the same as System.currentTimeMillis() :
Both of these will print out:
Joda-Time
Joda-Time is a tool that was originally developed to counter the problems with the old Java time and date classes.
With the release of Java 8, these problems have been tackled, and Joda-Time has served its purpose, without being used today very often.
Again, if your project isn’t updated to Java 8, Joda-Time is still a great tool to use as an alternative.
To use it in your project, it’s easiest to simply add a Maven dependency:
Working with Joda-Time is very similar to working with Java’s Date/Time API:
Note: When initializing Joda-Time’s DateTime class for the first time, there are known performance issues that occur due to the loading of chronology descriptors.
It’s easy to format this object:
Running this piece of code would yield:
Conclusion
There are many cases where someone would need to get the current date and/or time in Java, and we’ve covered all approaches there are as of now to do so, including the older classes — java.util.Date and java.util.Calendar as well as the newer java.time classes that arrived with the new Date/Time API.
Additionally, we’ve covered Joda-Time and its approach to getting the current date and time.
If you’d like to read about Converting a String to a Date in Java, we’ve got it covered!
Источник