Переклад рядка Java на дату


886

Який найкращий спосіб перетворити Stringформат "2 січня 2010 року" у формат DateJava на Java?

Зрештою, я хочу виділити місяць, день і рік як цілі числа, щоб я міг використовувати

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();

конвертувати дату в час.


15
Зауважте, що багато відповідей ігнорують тонкощі, такі як локалі та часові пояси. Я рекомендую уважно ознайомитися з документацією для класів Date, Calendar, TimeZone, Locale та SimpleDateFormat, перш ніж використовувати будь-який з них.
Крістофер Джонсон

2
можливий дублікат Convert String в java.util.Date
Ankur

7
Java 8 надає новий API / Дата / Час. Якщо ви користуєтесь Java 8 (або новішою версією), вам слід переглянути цю відповідь: stackoverflow.com/a/22180505/1115554
micha

2
Усі сетери Dateзастарілі.
Raedwald

5
FYI, клопітно старі класи дати і часу , такі як java.util.Date, java.util.Calendarі java.text.SimpleTextFormatтепер спадщина , витісняється java.time класів. Дивіться Підручник від Oracle .
Василь Бурк

Відповіді:


1641

Це важкий шлях, і ці java.util.Dateметоди встановлення застаріли з часу Java 1.1 (1997). Просто відформатуйте дату за SimpleDateFormatдопомогою шаблону формату, який відповідає вхідному рядку .

У вашому конкретному випадку "2 січня 2010 року" як вхідного рядка:

  1. "Січень" - це місяць з повним текстом, тому використовуйте для цього MMMMшаблон
  2. "2" - короткий день місяця, тому використовуйте для цього dшаблон.
  3. "2010" - це чотиризначний рік, тому використовуйте для цього yyyyшаблон.

String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010

Зауважте важливість явного Localeаргументу. Якщо ви його опустите, то він буде використовувати локаль за замовчуванням, який не обов'язково є англійською мовою, як використовується у назві місяця вхідного рядка. Якщо локал не збігається з вхідним рядком, то ви блудно отримаєте java.text.ParseExceptionрівний, навіть коли шаблон формату здається дійсним.

Ось витяг релевантності з javadoc з переліком усіх доступних моделей формату:

Letter  Date or Time Component  Presentation        Examples
------  ----------------------  ------------------  -------------------------------------
G       Era designator          Text                AD
y       Year                    Year                1996; 96
Y       Week year               Year                2009; 09
M/L     Month in year           Month               July; Jul; 07
w       Week in year            Number              27
W       Week in month           Number              2
D       Day in year             Number              189
d       Day in month            Number              10
F       Day of week in month    Number              2
E       Day in week             Text                Tuesday; Tue
u       Day number of week      Number              1
a       Am/pm marker            Text                PM
H       Hour in day (0-23)      Number              0
k       Hour in day (1-24)      Number              24
K       Hour in am/pm (0-11)    Number              0
h       Hour in am/pm (1-12)    Number              12
m       Minute in hour          Number              30
s       Second in minute        Number              55
S       Millisecond             Number              978
z       Time zone               General time zone   Pacific Standard Time; PST; GMT-08:00
Z       Time zone               RFC 822 time zone   -0800
X       Time zone               ISO 8601 time zone  -08; -0800; -08:00

Зауважте, що шаблони залежать від регістру і що текстові візерунки з чотирьох або більше символів представляють повну форму в іншому випадку використовується коротка або скорочена форма, якщо вона є. Так, наприклад, MMMMMабо більше це не потрібно.

Ось кілька прикладів дійсних SimpleDateFormatшаблонів для розбору даного рядка на сьогоднішній день:

Input string                            Pattern
------------------------------------    ----------------------------
2001.07.04 AD at 12:08:56 PDT           yyyy.MM.dd G 'at' HH:mm:ss z
Wed, Jul 4, '01                         EEE, MMM d, ''yy
12:08 PM                                h:mm a
12 o'clock PM, Pacific Daylight Time    hh 'o''clock' a, zzzz
0:08 PM, PDT                            K:mm a, z
02001.July.04 AD 12:08 PM               yyyyy.MMMM.dd GGG hh:mm aaa
Wed, 4 Jul 2001 12:08:56 -0700          EEE, d MMM yyyy HH:mm:ss Z
010704120856-0700                       yyMMddHHmmssZ
2001-07-04T12:08:56.235-0700            yyyy-MM-dd'T'HH:mm:ss.SSSZ
2001-07-04T12:08:56.235-07:00           yyyy-MM-dd'T'HH:mm:ss.SSSXXX
2001-W27-3                              YYYY-'W'ww-u

Важливо відзначити, що SimpleDateFormatце НЕ поточно. Іншими словами, ви ніколи не повинні оголошувати і призначати його як статичну або змінну екземпляра, а потім використовувати його повторно з різних методів / потоків. Ви завжди повинні створювати його абсолютно новим у локальній області методу.


Оновлення Java 8

Якщо вам трапляється на Java 8 або новішої версії, скористайтеся DateTimeFormatter(також тут натисніть посилання, щоб побачити всі попередньо визначені формати та наявні шаблони формату; підручник доступний тут ). Цей новий API натхненний JodaTime .

String string = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date); // 2010-01-02

Примітка: якщо ваша форма формату також містить частину часу, тоді використовуйте LocalDateTime#parse(text, formatter)замість LocalDate#parse(text, formatter). І якщо ваша формаформа також містить часовий пояс, тоді використовуйте ZonedDateTime#parse(text, formatter)замість цього.

Ось витяг релевантності з javadoc з переліком усіх доступних моделей формату:

Symbol  Meaning                     Presentation  Examples
------  --------------------------  ------------  ----------------------------------------------
G       era                         text          AD; Anno Domini; A
u       year                        year          2004; 04
y       year-of-era                 year          2004; 04
D       day-of-year                 number        189
M/L     month-of-year               number/text   7; 07; Jul; July; J
d       day-of-month                number        10

Q/q     quarter-of-year             number/text   3; 03; Q3; 3rd quarter
Y       week-based-year             year          1996; 96
w       week-of-week-based-year     number        27
W       week-of-month               number        4
E       day-of-week                 text          Tue; Tuesday; T
e/c     localized day-of-week       number/text   2; 02; Tue; Tuesday; T
F       week-of-month               number        3

a       am-pm-of-day                text          PM
h       clock-hour-of-am-pm (1-12)  number        12
K       hour-of-am-pm (0-11)        number        0
k       clock-hour-of-am-pm (1-24)  number        0

H       hour-of-day (0-23)          number        0
m       minute-of-hour              number        30
s       second-of-minute            number        55
S       fraction-of-second          fraction      978
A       milli-of-day                number        1234
n       nano-of-second              number        987654321
N       nano-of-day                 number        1234000000

V       time-zone ID                zone-id       America/Los_Angeles; Z; -08:30
z       time-zone name              zone-name     Pacific Standard Time; PST
O       localized zone-offset       offset-O      GMT+8; GMT+08:00; UTC-08:00;
X       zone-offset 'Z' for zero    offset-X      Z; -08; -0830; -08:30; -083015; -08:30:15;
x       zone-offset                 offset-x      +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z       zone-offset                 offset-Z      +0000; -0800; -08:00;

Зверніть увагу, що в ньому є кілька заздалегідь визначених форматів для більш популярних моделей. Тому замість, наприклад DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);, ви можете використовувати DateTimeFormatter.RFC_1123_DATE_TIME. Це можливо, тому що вони, навпаки SimpleDateFormat, є безпечними для потоків. Таким чином, ви можете також визначити своє, якщо це необхідно.

Для конкретного формату рядка введення вам не потрібно використовувати явне DateTimeFormatter: стандартну дату ISO 8601 , як-от 2016-09-26T17: 44: 57Z, можна проаналізувати безпосередньо, LocalDateTime#parse(text)оскільки в ній вже використовується ISO_LOCAL_DATE_TIMEформатер. Аналогічно LocalDate#parse(text)аналізує дату ISO без компонента часу (див. ISO_LOCAL_DATE) Та ZonedDateTime#parse(text)аналізує дату ISO з додаванням зміщення та часового поясу (див. ISO_ZONED_DATE_TIME).


Привіт, на вибір O, як дозволити друкувати UTC+08:00замість цього GMT+08:00. Я не міг отримати жодного прикладу.
theGamblerRises

Існує багато способів розбору дат, ось різні випадки використання DateFormat.parse
drorw

Привіт BalusC, у мене є рядок 20-JUN-16 12.00.00.000000000 AM, потрібна допомога, щоб перетворити це в Date. Ваша допомога високо цінується !!
мандер

@ mannedear о, вибачте ... це була моя помилка. У всякому разі , я отримав відповідь , ви можете побачити його тут: stackoverflow.com/questions/50982310 / ...
Queendevelopers

74

Ага так, знову дискусія з датою Java. Для боротьби з маніпуляціями з датою ми використовуємо Date , Calendar , GregorianCalendar та SimpleDateFormat . Наприклад, використовуючи свою січневу дату як вхідну інформацію:

Calendar mydate = new GregorianCalendar();
String mystring = "January 2, 2010";
Date thedate = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(mystring);
mydate.setTime(thedate);
//breakdown
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));

Тоді ви можете маніпулювати цим чимось на кшталт:

Calendar now = Calendar.getInstance();
mydate.set(Calendar.YEAR,2009);
mydate.set(Calendar.MONTH,Calendar.FEBRUARY);
mydate.set(Calendar.DAY_OF_MONTH,25);
mydate.set(Calendar.HOUR_OF_DAY,now.get(Calendar.HOUR_OF_DAY));
mydate.set(Calendar.MINUTE,now.get(Calendar.MINUTE));
mydate.set(Calendar.SECOND,now.get(Calendar.SECOND));
// or with one statement
//mydate.set(2009, Calendar.FEBRUARY, 25, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND));
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));

17
Не забувайте, що січень - номер місяця ... 0
Ніколас Зозол

50
String str_date = "11-June-07";
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("dd-MMM-yy");
date = formatter.parse(str_date);

13
Яка мета відокремлення декларацій та визначень (хоча це не робиться для першої змінної)?
Пітер Мортенсен

43

З Java 8 ми отримуємо новий API Дата / Час ( JSR 310 ).

Наступний спосіб можна використовувати для розбору дати в Java 8, не покладаючись на Joda-Time :

 String str = "January 2nd, 2010";

// if we 2nd even we have changed in pattern also it is not working please workout with 2nd 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM Q, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(str, formatter);

// access date fields
int year = date.getYear(); // 2010
int day = date.getDayOfMonth(); // 2
Month month = date.getMonth(); // JANUARY
int monthAsInt = month.getValue(); // 1

LocalDate - це стандартний клас Java 8 для представлення дати (без часу). Якщо ви хочете проаналізувати значення, що містять інформацію про дату та час, слід використовувати LocalDateTime . Для значень із часовими поясами використовуйте ZonedDateTime . Обидва пропонують parse()метод, подібний до LocalDate:

LocalDateTime dateWithTime = LocalDateTime.parse(strWithDateAndTime, dateTimeFormatter);
ZonedDateTime zoned = ZonedDateTime.parse(strWithTimeZone, zoneFormatter);

Символи форматування списку з DateTimeFormatter Javadoc :

All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. 
The following pattern letters are defined:

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
 G       era                         text              AD; Anno Domini; A
 u       year                        year              2004; 04
 y       year-of-era                 year              2004; 04
 D       day-of-year                 number            189
 M/L     month-of-year               number/text       7; 07; Jul; July; J
 d       day-of-month                number            10

 Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
 Y       week-based-year             year              1996; 96
 w       week-of-week-based-year     number            27
 W       week-of-month               number            4
 E       day-of-week                 text              Tue; Tuesday; T
 e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
 F       week-of-month               number            3

 a       am-pm-of-day                text              PM
 h       clock-hour-of-am-pm (1-12)  number            12
 K       hour-of-am-pm (0-11)        number            0
 k       clock-hour-of-am-pm (1-24)  number            0

 H       hour-of-day (0-23)          number            0
 m       minute-of-hour              number            30
 s       second-of-minute            number            55
 S       fraction-of-second          fraction          978
 A       milli-of-day                number            1234
 n       nano-of-second              number            987654321
 N       nano-of-day                 number            1234000000

 V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
 z       time-zone name              zone-name         Pacific Standard Time; PST
 O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
 X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
 x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
 Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

Як працює доля секунди? Якщо я використовую LocalDateTime date = LocalDateTime.parse ("20140920111713000", DateTimeFormatter.of‌ Pattern ("yyyyMMddHHm‌ mssSSS")); не вдалося, але якщо я використовую LocalDateTime date = LocalDateTime.parse ("20140920111713.000", DateTimeFormatter.o‌ fPattern ("yyyyMMddHH‌ mmss.SSS")); працює
reos

27

Хоча деякі відповіді технічно правильні, вони небажані.

  • Заняття java.util.Date та Календар, як відомо, не викликає труднощів. Через недоліки в розробці та реалізації уникайте їх. На щастя, у нас є вибір двох інших відмінних бібліотек дат:
    • Joda-Time
      Ця популярна бібліотека з безкоштовним кодом з відкритим кодом може використовуватися в декількох версіях Java. Багато прикладів його використання можна знайти в StackOverflow. Читання деяких із них допоможе швидко набрати швидкість.
    • java.time. * пакет
      Цей новий набір класів натхненний Joda-Time та визначений JSR 310. Ці класи вбудовані в Java 8. Розробляється проект для підтримки цих класів на Java 7, але це резервне копіювання не підтримується Oracle.
  • Як правильно зазначив Крістофер Джонсон у коментарі до цього питання, інші відповіді ігнорують життєво важливі питання:
    • Час дня
      Дата має як частину дати, так і частину дня)
    • Часовий пояс
      Початок дня залежить від часового поясу. Якщо не вдається вказати часовий пояс, застосовується часовий пояс JVM за замовчуванням. Це означає, що поведінка вашого коду може змінюватися під час роботи на інших комп’ютерах або зі зміненою настройкою часового поясу. Напевно, не те, що ти хочеш.
    • Місцезнаходження
      Мова мови визначає, як інтерпретувати слова (назва місяця та дня), що виникають під час розбору. ( Відповідь BalusC в цьому справляється належним чином.) Також, Місце локалізації впливає на вихід деяких форматів при створенні рядкового подання вашої дати.

Joda-Time

Наступні кілька приміток про Joda-Time.

Часовий пояс

У Joda-Time об’єкт DateTime справді знає власний призначений часовий пояс. Це протиставляє класу java.util.Date, який, здається, має часовий пояс, але цього не робить.

Зауважте в прикладі коду нижче того, як ми передаємо об’єкт часового поясу форматору, який аналізує рядок. Цей часовий пояс використовується для інтерпретації цієї дати як часу, що відбувся в цьому часовому поясі. Тому вам потрібно подумати і визначити часовий пояс, представлений цим рядковим входом.

Оскільки у вхідному рядку у вас немає жодної частини часу, Joda-Time призначає перший момент дня зазначеного часового поясу як час дня. Зазвичай це означає, 00:00:00але не завжди, через літній час (DST) або інші аномалії. До речі, ви можете зробити те ж саме в будь-якому екземплярі DateTime, зателефонувавши withTimeAtStartOfDay.

Формат формату

Символи, які використовуються у шаблоні форматера, у Joda-Time схожі на ті, що в java.util.Date/Calendar, але не зовсім однакові. Уважно прочитайте док.

Незмінюваність

Ми зазвичай використовуємо непорушні класи в Joda-Time. Замість того, щоб змінювати існуючий об'єкт Date-Time, ми називаємо методи, які створюють новий свіжий екземпляр, заснований на іншому об'єкті з більшістю скопійованих аспектів, за винятком випадків, коли потрібні зміни. Прикладом є дзвінок withZoneв останній рядок нижче. Незмінюваність допомагає зробити Joda-Time дуже безпечним для потоків, а також може зробити деякі роботи більш зрозумілими.

Перетворення

Вам потрібні об’єкти java.util.Date для використання з іншими класами / рамками, які не знають про об'єкти Joda-Time. На щастя, рухатися туди-сюди дуже легко.

Перехід від об'єкта java.util.Date (названий тут date) до Joda-Time DateTime…

org.joda.time.DateTime dateTime = new DateTime( date, timeZone );

Перехід іншого напрямку від Joda-Time до об'єкта java.util.Date…

java.util.Date date = dateTime.toDate();

Зразок коду

String input = "January 2, 2010";

java.util.Locale locale = java.util.Locale.US;
DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" ); // Arbitrarily chosen for example.
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMMM d, yyyy" ).withZone( timeZone ).withLocale( locale );
DateTime dateTime = formatter.parseDateTime( input );

System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTime in UTC/GMT: " + dateTime.withZone( DateTimeZone.UTC ) );

Під час запуску…

dateTime: 2010-01-02T00:00:00.000-10:00
dateTime in UTC/GMT: 2010-01-02T10:00:00.000Z

20

Працюючи з класом SimpleDateFormat, важливо пам’ятати, що Date не є безпечним для потоків, і ви не можете ділитися одним об’єктом Date з кількома потоками.

Також є велика різниця між "m" і "M", коли маленький регістр використовується хвилин, а капітальний випадок використовується протягом місяця. Те саме з "d" і "D". Це може спричинити непомітні помилки, які часто не помічаються. Для отримання детальної інформації див. Javadoc або Посібник з перетворення рядків на дату в Java .


1
Ця різниця в м / м коштувала мені 5 хвилин розчарування, дякую, що вказали на це :)
Буффало

Я здивований, що ніхто про це не згадав. Використання SimpleDateFormat у веб-додатках (або будь-якому іншому багатопотоковому додатку) - це велика ні-ні. Вгору через Java 7 я використовував "FastDateFormat".
JackLThornton

18
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date;
try {
    date = dateFormat.parse("2013-12-4");
    System.out.println(date.toString()); // Wed Dec 04 00:00:00 CST 2013

    String output = dateFormat.format(date);
    System.out.println(output); // 2013-12-04
} 
catch (ParseException e) {
    e.printStackTrace();
}

Це прекрасно працює для мене.


5
Це повернеться ср. Груд. 04 00:00:00 GST 2013 як вихід не 2013-12-04
Шамс

слід загорнути в спробу / зловити ParseException
svarog

Це не поверне значення, як очікувалося. Будь ласка, протестуйте перед тим, як порадити
lifemoveson

7

Ви можете використовувати SimpleDateformat для зміни рядка на сьогоднішній день

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = "2000-01-01";
Date date = new Date(sdf.parse(strDate).getTime());


1
Метод SimpleDateFormat розбору повертає об'єкт дати. Тоді навіщо використовувати конструктор Date?
nespapu

6

Також SimpleDateFormat недоступний з деякими клієнтськими технологіями, такими як GWT .

Добре зайти на Calendar.getInstance (), і ваша вимога - порівняти дві дати; піти на довгі побачення.


6

Прості два формати ми використали:

  1. Яку дату формату ми хочемо?
  2. Яка дата формату фактично присутня?

Ми аналізуємо формат повної дати та часу:

date="2016-05-06 16:40:32";

public static String setDateParsing(String date) throws ParseException {

    // This is the format date we want
    DateFormat mSDF = new SimpleDateFormat("hh:mm a");

    // This format date is actually present
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-mm-dd hh:mm");
    return mSDF.format(formatter.parse(date));
}

5

Моя скромна програма тестування. Я використовую його, щоб розібратися з форматором і шукати довгі дати, які я знаходжу в лог-файлах (але хто їх помістив ...).

Моя програма тестування:

package be.test.package.time;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

public class TimeWork {

    public static void main(String[] args) {    

        TimeZone timezone = TimeZone.getTimeZone("UTC");

        List<Long> longs = new ArrayList<>();
        List<String> strings = new ArrayList<>();

        //Formatting a date needs a timezone - otherwise the date get formatted to your system time zone.
        //Use 24h format HH. In 12h format hh can be in range 0-11, which makes 12 overflow to 0.
        DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS");
        formatter.setTimeZone(timezone);

        Date now = new Date();

        //Test dates
        strings.add(formatter.format(now));
        strings.add("01-01-1970 00:00:00.000");
        strings.add("01-01-1970 00:00:01.000");
        strings.add("01-01-1970 00:01:00.000");
        strings.add("01-01-1970 01:00:00.000");
        strings.add("01-01-1970 10:00:00.000");
        strings.add("01-01-1970 12:00:00.000");
        strings.add("01-01-1970 24:00:00.000");
        strings.add("02-01-1970 00:00:00.000");
        strings.add("01-01-1971 00:00:00.000");
        strings.add("01-01-2014 00:00:00.000");
        strings.add("31-12-1969 23:59:59.000");
        strings.add("31-12-1969 23:59:00.000");
        strings.add("31-12-1969 23:00:00.000");

        //Test data
        longs.add(now.getTime());
        longs.add(-1L);
        longs.add(0L); //Long date presentation at - midnight 1/1/1970 UTC - The timezone is important!
        longs.add(1L);
        longs.add(1000L);
        longs.add(60000L);
        longs.add(3600000L);
        longs.add(36000000L);
        longs.add(43200000L);
        longs.add(86400000L);
        longs.add(31536000000L);
        longs.add(1388534400000L);
        longs.add(7260000L);
        longs.add(1417706084037L);
        longs.add(-7260000L);

        System.out.println("===== String to long =====");

        //Show the long value of the date
        for (String string: strings) {
            try {
                Date date = formatter.parse(string);
                System.out.println("Formated date : " + string + " = Long = " + date.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

        System.out.println("===== Long to String =====");

        //Show the date behind the long
        for (Long lo : longs) {
            Date date = new Date(lo);
            String string = formatter.format(date);
            System.out.println("Formated date : " + string + " = Long = " + lo);        
        }
    }
}

Результати тесту:

===== String to long =====
Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
Formated date : 01-01-1970 00:00:00.000 = Long = 0
Formated date : 01-01-1970 00:00:01.000 = Long = 1000
Formated date : 01-01-1970 00:01:00.000 = Long = 60000
Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
Formated date : 01-01-1970 24:00:00.000 = Long = 86400000
Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
Formated date : 31-12-1969 23:59:59.000 = Long = -1000
Formated date : 31-12-1969 23:59:00.000 = Long = -60000
Formated date : 31-12-1969 23:00:00.000 = Long = -3600000
===== Long to String =====
Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
Formated date : 31-12-1969 23:59:59.999 = Long = -1
Formated date : 01-01-1970 00:00:00.000 = Long = 0
Formated date : 01-01-1970 00:00:00.001 = Long = 1
Formated date : 01-01-1970 00:00:01.000 = Long = 1000
Formated date : 01-01-1970 00:01:00.000 = Long = 60000
Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
Formated date : 01-01-1970 02:01:00.000 = Long = 7260000
Formated date : 04-12-2014 15:14:44.037 = Long = 1417706084037
Formated date : 31-12-1969 21:59:00.000 = Long = -7260000

2

Посилання на джерело

Для Android

Calendar.getInstance (). GetTime () дає

Thu Jul 26 15:54:13 GMT+05:30 2018

Використовуйте

String oldDate = "Thu Jul 26 15:54:13 GMT+05:30 2018";
DateFormat format = new SimpleDateFormat("EEE LLL dd HH:mm:ss Z yyyy");
Date updateLast = format.parse(oldDate);

0

Перетворення рядка на дату:

private Date StringtoDate(String date) throws Exception {
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
            java.sql.Date sqlDate = null;
            if( !date.isEmpty()) {

                try {
                    java.util.Date normalDate = sdf1.parse(date);
                    sqlDate = new java.sql.Date(normalDate.getTime());
                } catch (ParseException e) {
                    throw new Exception("Not able to Parse the date", e);
                }
            }
            return sqlDate;
        }

-1

Спробуйте це

String date = get_pump_data.getString("bond_end_date");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date datee = (Date)format.parse(date);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.