Как да конвертирам низ от ISO-8601 datetime (напр.: 2012-05-31T13:48:04Z
) в брой секунди (10 digit integer
) с помощта на Java?
Низ от ISO-8601 дата и час до брой секунди в Java
Отговори (3)
пробвай по този начин
String DateStr="2012-05-31T13:48:04Z";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Date d=sdf.parse(DateStr);
System.out.println(d.getTime());
изход 1338452284000
От коментарите на OP getTime() връща броя милисекунди от 1 януари 1970 г., 00:00:00 GMT, представен от този обект Date.Източник
Epoch
. Трябва да споменеш доста неща тук, приятел! :)
- person RainMaker; 02.12.2013
използвайки SimpleDateFormat
и използвайте формат като yyyy-MM-dd 'T' HH:mm:ss 'Z'
tl;dr
Instant.parse( "2012-05-31T13:48:04Z" )
.getEpochSecond()
1338472084
Вижте този код, изпълняван на живо в IdeOne.com.
Използване на java.time
Много по-лесно с класовете java.time, които изместват проблемните стари класове за дата-час.
Лесен за анализ на входния низ, тъй като класовете java.time използват формати ISO 8601 по подразбиране при генериране/анализ на низове. Така че няма нужда да указвате шаблон за форматиране.
Класът Instant
представлява момент от времева линия в UTC с разделителна способност наносекунди (до девет (9) цифри от десетична дроб).
Instant instant = Instant.parse( "2012-05-31T13:48:04Z" ) ;
Предполагам, че под „секунди“ сте имали предвид броя секунди, изминали от началото на 1970 г. UTC (1970-01-01T00:00:00Z
). Класът Instant
може да ви каже броя секунди от тази Unix епоха.
long secondsSinceEpoch = instant.getEpochSecond() ;
1338472084
Пазете се от загуба на данни, разбира се. Вие пренебрегвате всяка дробна секунда, която може да присъства във вашата стойност за дата-час.
Относно java.time
Рамката java.time е вграден в Java 8 и по-нови версии. Тези класове изместват проблемните стари наследени класове за дата-час като java.util.Date
, Calendar
, & SimpleDateFormat
.
Проектът Joda-Time, сега в режим на поддръжка, съветва мигриране към java.time класове.
За да научите повече, вижте урока за Oracle. И потърсете в Stack Overflow много примери и обяснения. Спецификацията е JSR 310.
Къде да получа класовете java.time?
- Java SE 8 and SE 9 and later
- Built-in.
- Част от стандартния Java API с пакетна реализация.
- Java 9 добавя някои незначителни функции и поправки.
- Java SE 6 and SE 7
- Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
- Android
- The ThreeTenABP project adapts ThreeTen-Backport (mentioned above) for Android specifically.
- Вижте Как да използвате ThreeTenABP….
Проектът ThreeTen-Extra разширява java.time с допълнителни класове . Този проект е тестова площадка за възможни бъдещи допълнения към java.time. Тук може да намерите някои полезни класове като Interval
a>, YearWeek
, YearQuarter
и още.