Вопрос-ответ

Change date format in a Java string

Изменить формат даты в строке Java

У меня есть String, представляющий дату.

String date_s = "2011-01-18 00:00:00.0";

Я хотел бы преобразовать его в Date и вывести в YYYY-MM-DD формате.


2011-01-18


Как я могу этого добиться?


Хорошо, основываясь на ответах, которые я получил ниже, вот что я попробовал:

String date_s = " 2011-01-18 00:00:00.0"; 
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));

Но он выводит 02011-00-1 вместо желаемого 2011-01-18. Что я делаю не так?

Переведено автоматически
Ответ 1

Используйте LocalDateTime#parse() (или ZonedDateTime#parse(), если строка случайно содержит часть часового пояса) для разбора String по определенному шаблону в LocalDateTime.

String oldstring = "2011-01-18 00:00:00.0";
LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));

Затем используйте LocalDateTime#format() (или ZonedDateTime#format()) для форматирования LocalDateTime в String по определенному шаблону.

String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18

Или, если вы еще не на Java 8, используйте SimpleDateFormat#parse() для разбора a String по определенному шаблону в a Date.

String oldstring = "2011-01-18 00:00:00.0";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);

Затем используйте SimpleDateFormat#format() для форматирования a Date в a String по определенному шаблону.

String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18

Смотрите также:


Обновление: согласно вашей неудачной попытке, которую вы добавили в вопрос после публикации этого ответа; шаблоны чувствительны к регистру. Внимательно прочитайте java.text.SimpleDateFormat javadoc, что обозначают отдельные части. Например, так обозначаются M месяцы и m минуты. Кроме того, годы состоят из четырех цифр yyyy, а не из пяти yyyyy. Посмотрите поближе на фрагменты кода, которые я разместил здесь выше.

Ответ 2

Форматирование ЧУВСТВИТЕЛЬНО К РЕГИСТРУ, поэтому ИСПОЛЬЗУЙТЕ MM для месяца, а не mm (это для минуты) и гггг Для справки вы можете использовать следующую таблицу.

G   Era designator  Text    AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M 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 name in week Text Tuesday; Tue
u Day number of week (1 = Monday, ..., 7 = Sunday) 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

Примеры:

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

Ответ, конечно, заключается в создании объекта SimpleDateFormat и использовании его для разбора строк на даты и форматирования дат в строки. Если вы пробовали SimpleDateFormat и это не сработало, то, пожалуйста, покажите свой код и любые ошибки, которые вы можете получить.

Дополнение: "мм" в строке формата не совпадает с "ММ". Используйте ММ для месяцев и мм для минут. Также, гггг - это не то же самое, что гггг. например,:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FormateDate {

public static void main(String[] args) throws ParseException {
String date_s = "2011-01-18 00:00:00.0";

// *** note that it's "yyyy-MM-dd hh:mm:ss" not "yyyy-mm-dd hh:mm:ss"
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = dt.parse(date_s);

// *** same for the format String below
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(dt1.format(date));
}

}
Ответ 4

Почему бы просто не использовать это

Date convertToDate(String receivedDate) throws ParseException{
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = formatter.parse(receivedDate);
return date;
}

Кроме того, это другой способ :

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String requiredDate = df.format(new Date()).toString();

или

Date requiredDate = df.format(new Date());
java string date