Преобразование строки Java в дату
Каков наилучший способ конвертировать String
в формате "2 января 2010 года" в Date
на яве?
В конечном итоге я хочу выделить месяц, день и год как целые числа, чтобы я мог использовать
Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();
преобразовать дату во время.
18 ответов
Это трудный путь, и те, java.util.Date
методы установки устарели с Java 1.1 (1997). Просто отформатируйте дату, используя SimpleDateFormat
используя шаблон формата, соответствующий входной строке.
В вашем конкретном случае "2 января 2010" в качестве входной строки:
- "Январь" - это полнотекстовый месяц, поэтому используйте
MMMM
образец для этого - "2" - короткий день месяца, поэтому используйте
d
образец для этого. - "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
).
Ах да, обсуждение 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));
String str_date = "11-June-07";
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("dd-MMM-yy");
date = formatter.parse(str_date);
С Java 8 мы получаем новый API даты / времени ( JSR 310).
Следующий способ можно использовать для разбора даты в Java 8, не полагаясь на Joda-Time:
String str = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, 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;
Хотя некоторые ответы технически правильны, они не рекомендуются.
- Классы java.util.Date & Calendar, как известно, хлопотны. Из-за недостатков в дизайне и реализации избегайте их. К счастью, у нас есть выбор из двух других превосходных библиотек даты и времени:
- Joda времени
Эта популярная бесплатная библиотека с открытым исходным кодом может использоваться в нескольких версиях Java. Многие примеры его использования можно найти в Stackru. Чтение некоторых из них поможет вам быстрее освоиться. - пакет java.time.*
Этот новый набор классов основан на Joda-Time и определен JSR 310. Эти классы встроены в Java 8. В настоящее время ведется проект по переносу этих классов в Java 7, но эта обратная передача не поддерживается Oracle.
- Joda времени
- Как правильно заметил Кристофер Джонсон в своем комментарии к вопросу, другие ответы игнорируют насущные проблемы:
- Время суток
Дата имеет как часть даты, так и часть времени суток) - Часовой пояс
Начало дня зависит от часового пояса. Если вам не удается указать часовой пояс, применяется часовой пояс JVM по умолчанию. Это означает, что поведение вашего кода может измениться при запуске на других компьютерах или с измененной настройкой часового пояса. Наверное, не то, что вы хотите. - место действия
Язык 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
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();
}
Он отлично работает для меня.
При работе с классом SimpleDateFormat важно помнить, что Date не является поточно-ориентированным, и вы не можете совместно использовать один объект Date для нескольких потоков.
Также существует большая разница между "m" и "M", где регистр используется для минут, а прописной - для месяца. То же самое с "D" и "D". Это может вызвать незначительные ошибки, которые часто упускаются из виду. См. Javadoc или Руководство по Преобразованию Строки в Дату в Java для получения дополнительной информации.
Вы можете использовать SimpleDateformat для изменения строки на дату
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = "2000-01-01";
Date date = new Date(sdf.parse(strDate).getTime());
Мы использовали два простых средства форматирования:
- Какой формат даты мы хотим?
- Какой формат даты на самом деле присутствует?
Мы анализируем полный формат даты и времени:
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));
}
Кроме того, SimpleDateFormat недоступен для некоторых технологий на стороне клиента, таких как GWT.
Рекомендуется использовать Calendar.getInstance(), и вам необходимо сравнить две даты; пойти на длинное свидание.
Моя скромная тестовая программа. Я использую его, чтобы поиграть с форматером и посмотреть длинные даты, которые я нахожу в лог-файлах (но кто их там поместил...).
Моя тестовая программа:
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
Я работал над синтаксическим анализом String в LocalDateTime. оставлю это здесь для примера
LocalDateTime d = LocalDateTime.parse("20180805 101010", DateTimeFormatter.ofPattern("yyyyMMdd HHmmss"));
Для 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);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date date1 = null;
Date date2 = null;
try {
date1 = dateFormat.parse(t1);
date2 = dateFormat.parse(t2);
} catch (ParseException e) {
e.printStackTrace();
}
DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String StDate = formatter.format(date1);
String edDate = formatter.format(date2);
System.out.println("ST "+ StDate);
System.out.println("ED "+ edDate);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
return sdf.format(date);
От строки до даты
SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
return sdf.parse(dateStr);
Из строки даты в другой формат
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat newSdf = new SimpleDateFormat("dd-MM-yyyy");
Date temp = sdf.parse(dateStr);
return newSdf.format(temp);
Ссылка на источник .
У меня была задача, где мне нужно было написать код, который бы брал любую строку и пытался преобразовать ее в дату, когда формат строки заранее неизвестен.
Я написал интересную утилиту. Вот статья, которая описывает идею: Java 8 пакет java.time: анализ любой строки на сегодняшний день. Это было реализовано в Java 8, но идея могла быть реализована и в более ранних версиях.
Преобразование строки в дату:
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;
}
Попробуй это
String date = get_pump_data.getString("bond_end_date");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date datee = (Date)format.parse(date);