Android получить текущую метку времени?
Я хочу получить текущую временную метку вот так: 1320917972
Из блога разработчиков:
System.currentTimeMillis() это стандартные «настенные» часы (время и дата), выражающие миллисекунды начиная с эпохи. Настенные часы могут быть установлены пользователем или телефонной сетью (см. SetCurrentTimeMillis (long) ), поэтому время может прыгать назад или вперед непредсказуемо. Эти часы следует использовать только в тех случаях, когда важна переписка с реальными датами и временем, например, в приложении с календарем или будильником. Для измерения интервала или истекшего времени следует использовать разные часы. Если вы используете System.currentTimeMillis() , рассмотреть слушая ACTION_TIME_TICK , ACTION_TIME_CHANGED и ACTION_TIMEZONE_CHANGED Намерение вещание , чтобы узнать , когда меняется время.
1320917972 — это метка времени Unix, использующая количество секунд с 00:00:00 UTC 1 января 1970 года. Вы можете использовать TimeUnit класс для преобразования единиц измерения — от System.currentTimeMillis() до секунд.
Вы можете использовать класс SimpleDateFormat :
Используйте метод ниже, чтобы получить текущую отметку времени. Он отлично работает для меня.
Это простое использование:
если вы хотите в определенном формате, то вам нужен Formatter, как показано ниже
Вот удобочитаемая отметка времени, которая может использоваться в имени файла, на случай, если кому-то понадобится то же, что и мне:
и метка времени в формате времени
java.time
Я хотел бы внести современный ответ.
Вывод при запуске только сейчас:
В то время как деление на 1000 не станет неожиданностью для многих, выполнение ваших собственных преобразований времени может быть затруднено для довольно быстрого чтения, поэтому это плохая привычка, когда вы можете избежать этого.
Instant Класс , который я использую является частью java.time, современной даты Java и времени API. Он встроен в новые версии Android, API уровня 26 и выше. Если вы программируете для более старого Android, вы можете получить бэкпорт, см. Ниже. Если вы не хотите этого делать, понятно, что я бы все еще использовал встроенное преобразование:
Это так же, как ответ по sealskej. Выход такой же, как и раньше.
Источник
Создаем красивый Date/Time/Data Picker в Android
Рано или поздно любой разработчик сталкивается с мыслью, что что-то в жизни нужно написать так, чтобы нравилось не заказчику, а самому себе. Решив, что наконец-то я созрел для написания приложения для Android, которым я сам бы пользовался с удовольствием — столкнулся с тем, что внешний вид вьюх в Android не очень-то и готов к воплощению моих красивых идей. И если обычные кнопки и TextView легко поддаются переделке, то вот с TimePicker-ом дела обстоят намного хуже. Творческая часть мозга взбунтовалась и решила, что если в приложении и будет Date/TimePicker, то такой, чтобы им было не только удобно, но и приятно пользоваться, иначе она (та самая творческая часть мозга) объявит бойкот и перестанет помогать.
Ну что же, вызов принят, напишем свой Picker с преферансом и куртизанками.
Именно такой Picker мы будем сооружать.
(Для тех кто просто хочет использовать виджет — ссылка на Git в конце статьи)
Первым делом пришлось ответить себе вопросы — а каким должен быть этот самый Picker и что он должен уметь делать?
Конечно, на вкус и цвет фломастеры разные, но если сравнить стилистику конкурирующих Picker-ов, то на мой взгляд выигрывает правый:
Time picker в Android(слева) и iOS (справа)
Пришлось отвечать для себя — а чем же привлекательнее правый Picker?
Ответ был не один:
- Приятнее выглядит
- Интуитивное переключение
- Никаких лишних элементов
Но настроение хотело большего и поэтому сразу же были добавлены пункты, которые должны присутствовать в новом Picker’e.
- Возможность легко менять размер без ущерба дизайну
- Возможность указывать не только время но и… да вообще любую информацию
- Все-таки должно быть более андроидным нежели яблочным
Итак, цели обозначены, приступим.
Палитра
Вообще все цвета палитры подбирались вручную перед каждым добавлением элемента. Цвета сравнивались и корректировались. В итоге получилась следующая палитра:
Названия цветов думаю сами за себя говорят, но в любом случае в коде будут пояснения, так что разобраться не составит труда.
Вставляем данный код в наш color.xml.
Создание Picker’а
Picker относится к View Элементам, значит создаем класс DataPicker:
Нам понадобятся следующие переменные:
В конструкторы возможны передачи параметров, стилей и т.д. Нам все эти излишки в рамках данной статьи не понадобятся.
Затем нам необходимо переопределить метод onSizeChanged:
Это нужно для того, чтобы при каждом изменении размера нашего холста все наши элементы прорисовывались правильно. Всегда зная размеры холста мы точно сможем заполнить все его области.
Следующим этапом необходимо определиться с возможностями нашего Picker’a. Первым делом он должен получать значения, которые необходимо отображать. Создадим для этого метод:
Для данного метода мне понадобился Handler. Дело в том, что размеры холста в момент создания равны 0 как по ширине, так и по высоте. В данном методе мы обращаемся к классу данных, в котором лежат наши значения и их параметры. Но на всякий случай проверяем, задан ли нашему холсту какой-нибудь размер. И если размер еще не определен, то просто немного отложим выполнение данной функции.
Класс со значениями и их параметрами выглядит так:
Следующая возможность, которая должна быть — это возможность изменения значения Picker’a путем скролла.
Переопределим для этого метод OnTouch:
Собственно метод выравнивания наших значений после остановки скроллинга:
Как мы видим, в прошлом методе мы использовали функцию onSelected, чтобы наш Picker сообщил о том, что пользователь выбрал какое-то значение.
Создадим для этого слушатель и определим события:
Когда все основные методы у нас определены, приступим к самому главному. Нам нужно отрисовать наш Picker на холсте. За отрисовку у нас отвечает метод onDraw:
Выглядеть это должно вот так:
С тенями уже получше:
Уже что-то интересное:
Так намного лучше:
Завершаем метод onDraw отловом ошибок и устанавливаем fps отрисовки:
Готово!
Удобство нашего Picker’a заключается в том, что мы можем их комбинировать для более удобного выбора значений.
Например, можно скомбинировать 4 компонента для выбора времени напоминания:
Дальше нашему Picker’у можно добавить обработку атрибутов, кастомные параметры, работу с адаптерами… Тут уже поле деятельности неисчерпаемо и в одной статье не разгуляться. Но если сообществу будет интересно продолжение — буду рад продолжить.
Источник
Получить текущее время и дату на 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 в своем приложении, вы можете использовать его.
Он поддерживает миллисы и часовые пояса, поэтому это довольно хороший вариант прямо из коробки.
Источник