Конвертировать строку Дата в метку времени в Android? - PullRequest
20 голосов
/ 09 августа 2011

Я хочу преобразовать свою дату (в формате String), например, 13-09-2011, в метку времени.Я использовал приведенный ниже код, но в результате получил 2011-09-13 00: 00: 00.0.Но мне нужна метка времени, формат 1312828200000.

Я не могу понять, как конвертировать это.

Мой код:

String str_date="13-09-2011";
DateFormat formatter ; 
Date date ; 
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str_date); 
java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
System.out.println("Today is " +timeStampDate);

Ответы [ 5 ]

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

Если вы используете getTime() из Date объекта, вы получите время в миллисекундах. Не нужно использовать Timestamp, чтобы получить свой результат.

String str_date="13-09-2011";
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = (Date)formatter.parse(str_date); 
System.out.println("Today is " +date.getTime());

Приведенный выше код напечатает что-то вроде 1312828200000, что вам нужно, и это длинное значение.

13 голосов
/ 27 июня 2014
String str_date=month+"-"+day+"-"+yr;
DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date); 
long output=date.getTime()/1000L;
String str=Long.toString(output);
long timestamp = Long.parseLong(str) * 1000;
2 голосов
/ 09 августа 2011

Эта строка:

"Today is " +timeStampDate

вызывает TimeStamp.toString() метод ", который форматирует временную метку в escape-формате JDBC. yyyy-mm-dd hh:mm:ss.fffffffff, где ffffffffff указывает наносекунды."

Метка времениполучил внутри имеет значение, которое вы хотите.Если вы хотите получить его, чем использовать: System.out.println("Today is " + timeStampDate.getTime());

    String str_date="13-09-2011";
    DateFormat formatter ; 
    Date date ; 
    formatter = new SimpleDateFormat("dd-MM-yyyy");
    date = (Date)formatter.parse(str_date);
    java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
    System.out.println("Today is " + timeStampDate.getTime());

Или, если вам не нужен Timestamp, вы можете напрямую использовать date.getTime().Это "Returns the Date as a millisecond value.":

    String str_date="13-09-2011";
    DateFormat formatter ; 
    Date date ; 
    formatter = new SimpleDateFormat("dd-MM-yyyy");
    date = (Date)formatter.parse(str_date);
    System.out.println("Today is " + date.getTime());
1 голос
/ 07 ноября 2018

tl; dr

Используйте современные java.time классы.

LocalDate.parse( 
    "13-09-2011" , 
    DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) 
)
.atStartOfDay(
    ZoneId.of( "Africa/Casablanca" )  // Or use `ZoneOffset.UTC` instead of a zone.
)
.toInstant()
.toEpochMilli()

См. Этот код, запущенный на IdeOne.com .

1315872000000

Подробности

По-видимому, вы хотите представить первый момент определенной даты в виде миллисекунд с начала отсчета эпохи первого момента1970 года в UTC.

java.time

Современный подход использует классы java.time , которые несколько лет назад вытеснили такие классные классы, как Date, Calendar и SimpleDateFormat.

Сначала проанализируйте вашу входную строку как LocalDate, для значения только на дату без времени суток и без часового пояса.

Совет:Вместо того, чтобы использовать такие пользовательские форматы при обмене значениями даты и времени в виде текста, используйте стандартные форматы ISO 8601 .Классы java.time используют их по умолчанию при разборе / генерации строк.

String input = "13-09-2011" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;

Определение первого момента дня в эту дату.Для этого требуется часовой пояс.В любой момент времени дата меняется по всему миру в зависимости от зоны.Например, через несколько минут после полуночи в Париж Франция - это новый день, в то время как "вчера" в Монреаль Квебек .

Если часовой пояс не указан,JVM неявно применяет свой текущий часовой пояс по умолчанию.Это значение по умолчанию может измениться в любой момент во время выполнения (!), Поэтому ваши результаты могут отличаться.Лучше указать желаемый / ожидаемый часовой пояс явно в качестве аргумента.

Укажите правильное имя часового пояса в формате continent/region, например America/Montreal, Africa/Casablanca или Pacific/Auckland.Никогда не используйте 2-4 буквенные сокращения, такие как EST или IST, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).

ZoneId z = ZoneId.of( "America/Montreal" ) ;

Никогда не предполагайте, что день начинается в 00:00.В некоторых зонах в некоторые даты день может начинаться в другое время, например в 01:00.Пусть java.time определит первый момент.

ZonedDateTime zdt = ld.startOfDay( z ) ;  // Determine first moment of the day on this date in this zone. May not be 00:00.

Настройте UTC из этой зоны, извлекая Instant.

Instant instant = zdt.toInstant() ;

Получите счет в миллисекундахс 1970-01-01T00: 00Z.Остерегайтесь возможной потери данных, так как Instant имеет лучшее разрешение наносекунд.Любые микросекунды или наносекунды будут игнорироваться.

long millisecondsSinceEpoch = instant.toEpochMilli() ;

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

Instant instant = Instant.ofEpochMilli( millisecondsSinceEpoch) ;

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

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздних версий - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большинство функций java.time перенесено в Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии реализации связки Android java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянутое выше). См. Как использовать ThreeTenABP… .
0 голосов
/ 26 марта 2018

Это может помочь вам

    long time= System.currentTimeMillis();//timestamp in milliseconds of current time


    String tp = Long.toString(time);//use timestamp as a string
...