Преобразование строки Java в дату

886

Как лучше всего преобразовать Stringв формате «2 января 2010 года» Dateв Java?

В конечном итоге я хочу выделить месяц, день и год как целые числа, чтобы я мог использовать

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

преобразовать дату во время.

littleK
источник
15
Обратите внимание, что многие ответы игнорируют такие тонкости, как локали и часовые пояса. Я бы рекомендовал внимательно прочитать документацию по классам Date, Calendar, TimeZone, Locale и SimpleDateFormat перед использованием любого из них.
Кристофер Джонсон
2
возможный дубликат строки преобразования в java.util.Date
Ankur
7
Java 8 предоставляет новый API Date / Time. Если вы используете 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).

BalusC
источник
Привет, в опцию O, как позволить ему печатать UTC+08:00вместо GMT+08:00. Я не мог получить ни одного примера.
TheGamblerRises
Есть много способов разобрать даты, вот различные варианты использования DateFormat.parse
drorw
Привет BalusC, у меня есть строка 20-JUN-16 12.00.00.000000000 AM, нужна помощь, чтобы преобразовать это в дату. Ваша помощь очень ценится!
Маннедар
@ mannedear ой прости .. это была моя ошибка. В любом случае, я получил ответ, вы можете увидеть его здесь: stackoverflow.com/questions/50982310/…
Queendevelopers
74

Ах да, обсуждение Java Date, опять же. Для работы с датами мы используем 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));
pn1 чувак
источник
17
Не забывайте, что январь - номер месяца ... 0
Николас Зозол
50
String str_date = "11-June-07";
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("dd-MMM-yy");
date = formatter.parse(str_date);
Ruthreshwar
источник
13
Какова цель разделения объявлений и определений (хотя не сделано для первой переменной)?
Питер Мортенсен,
43

С Java 8 мы получаем новый API Date / Time ( 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);

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

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‌ ("yyyyMMddHHm‌ mssSSS")); произойдет сбой, но если я использую LocalDateTime date = LocalDateTime.parse ("20140920111713.000", DateTimeFormatter.o‌ fPattern ("yyyyMMddHH‌ mmss.SSS")); это работает
Reos
27

Хотя некоторые ответы технически правильны, они не рекомендуются.

  • Классы java.util.Date & Calendar, как известно, хлопотны. Из-за недостатков в дизайне и реализации избегайте их. К счастью, у нас есть выбор из двух других превосходных библиотек даты и времени:
    • Joda-Time
      Эта популярная бесплатная библиотека с открытым исходным кодом может использоваться в нескольких версиях Java. Многие примеры его использования можно найти в StackOverflow. Чтение некоторых из них поможет вам быстро освоиться.
    • Пакет java.time. *
      Этот новый набор классов основан на Joda-Time и определен JSR 310. Эти классы встроены в Java 8. В настоящее время ведется проект по переносу этих классов на Java 7, но эта обратная порция не поддерживается Oracle.
  • Как правильно заметил Кристофер Джонсон в своем комментарии к вопросу, другие ответы игнорируют насущные проблемы:
    • Время дня
      Дата имеет как часть даты, так и часть времени суток)
    • Часовой пояс
      Начало дня зависит от часового пояса. Если вам не удается указать часовой пояс, применяется часовой пояс JVM по умолчанию. Это означает, что поведение вашего кода может измениться при запуске на других компьютерах или с измененной настройкой часового пояса. Наверное, не то, что вы хотите.
    • Locale Язык
      Locale определяет, как интерпретировать слова (название месяца и дня), встречающиеся при разборе. ( Ответ BalusC обрабатывает это правильно.) Кроме того, Locale влияет на вывод некоторых форматеров при генерации строкового представления вашей даты и времени.

Joda времени

Далее следует несколько заметок о 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 try / catch
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);
Мадука Дилхан
источник