Подтвердить что ты не робот

Формат Java yyyy-MM-dd'T'HH: mm: ss.SSSz до yyyy-mm-dd HH: mm: ss

Я пытаюсь отформатировать дату в формате yyyy-MM-dd'T'HH: mm: ss.SSSz до yyyy-mm-dd HH: mm: ss, который должен быть легким, но я не могу получить он работает.

Дата, которая должна быть проанализирована, имеет форму: 2012-10-01T09: 45: 00.000 + 02: 00
Теперь я использую этот простой формат даты, чтобы отформатировать его:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz", Locale.FRANCE);

но это дает выход, похожий на 2012-10-01T09: 45: 00.000UTC + 00: 00.

Я также пытался использовать "yyyy-MM-dd'T'HH: mm: ss.SSSZ" в качестве шаблона и "yyyy-MM-ddHH: mm: ss". Последний возвращает дату в форме 2012-10-01T09: 45: 00 close, но еще не существует.

Я понял, что подстрока T будет немного беспорядочной и создает накладные расходы без каких-либо причин, и что будет правильным способом отформатировать эти даты?

Чтобы проиллюстрировать, я хотел бы конвертировать 2012-10-01T09: 45: 00.000 + 02: 00 в 2012-10-01 09:45:00

Ура!

4b9b3361

Ответ 1

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(time);
String formattedTime = output.format(d);

Это работает. Вы должны использовать два SimpleDateFormats, один для ввода и один для вывода, но он даст вам то, что вы хотите.

Ответ 2

Gooye, если в вашем проекте можно использовать Joda Time, тогда этот код работает для меня:

String dateStr = "2012-10-01T09:45:00.000+02:00";
String customFormat = "yyyy-MM-dd HH:mm:ss";

DateTimeFormatter dtf = ISODateTimeFormat.dateTime();
LocalDateTime parsedDate = dtf.parseLocalDateTime(dateStr);

String dateWithCustomFormat = parsedDate.toString(DateTimeFormat.forPattern(customFormat));
System.out.println(dateWithCustomFormat);

Ответ 3

java.time

У нас есть новая технология для этой проблемы: структура java.time, встроенная в Java 8 и более поздние версии.

Ваша строка ввода находится в стандартном формате ISO 8601. Этот стандарт используется по умолчанию в классах java.time для синтаксического анализа/генерации текстовых представлений значений даты и времени.

OffsetDateTime odt = OffsetDateTime.parse( "2012-10-01T09:45:00.000+02:00" );

Ваш вопрос предполагает, что вы хотите усечь всю секунду.

OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo( ChronoUnit.SECONDS );

Кажется, вы хотите опустить информацию о смете и часовом поясе. Предопределенный форматтер DateTimeFormatter.ISO_LOCAL_DATE_TIME делает это.

И, видимо, вы хотите использовать пространство в середине, а не стандартное T. Вы можете определить свой собственный форматировщик для этого, но я просто выполнил бы строчную манипуляцию, чтобы заменить T на SPACE.

String output = odtTruncatedToWholeSecond.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " );

Просто манипуляции с строками

Как говорится в комментариях к Вопросу, строго говоря, вы можете достичь своей цели, работая только со строками и не переходя к объектам с датой. Но я предоставляю этот ответ здесь, предполагая, что у вас может быть другая бизнес-логика для работы с этими значениями даты и времени.

Ответ 4

Если вам действительно нужно быть быстрым (не так, как я полагаю, вы это делаете):

char[] chars = sourceDate.toCharArray();
chars[10] = ' ';
String targetDate = new String(chars, 0, 19);

Ответ 5

Я пытался отформатировать строку даты, полученную от ответа JSON, например. 2016-03-09T04: 50: 00-0800 до yyyy-MM-dd. Итак, вот что я пробовал, и это сработало и помогло мне назначить форматированную строку даты календарным виджетом.

String DATE_FORMAT_I = "yyyy-MM-dd'T'HH:mm:ss";
String DATE_FORMAT_O = "yyyy-MM-dd";


SimpleDateFormat formatInput = new SimpleDateFormat(DATE_FORMAT_I);
SimpleDateFormat formatOutput = new SimpleDateFormat(DATE_FORMAT_O);

Date date = formatInput.parse(member.getString("date"));
String dateString = formatOutput.format(date);

Это сработало. Спасибо.

Ответ 6

String dateStr = "2016-09-17T08:14:03+00:00";
String s = dateStr.replace("Z", "+00:00");
s = s.substring(0, 22) + s.substring(23);
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(s);
Timestamp createdOn = new Timestamp(date.getTime());
mcList.setCreated_on(createdOn);

Java 7 добавила поддержку дескрипторов часовых поясов в соответствии с ISO 8601. Это может быть использование в Java 7.