Самый простой способ конвертировать Java Calendar в ISO
У меня есть календарь, который возвращается в следующем формате (это в типе календаря Java): 2020-02-15T00:00:00
, Какой самый простой и краткий способ преобразовать его в следующий календарь, как этот, и сохранить тип календаря: Mon Nov 05 2018 14:08:58 GMT+0000 (Greenwich Mean Time)
?
В JavaScript мы можем использовать что-то вроде var date = new Date();
4 ответа
Вот пример использования строки, преобразованной в ваш пример формата с использованием API даты, представленного в Java 8:
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
class Scratch {
public static void main(String[] args) {
String input = "2020-02-15T00:00:00";
LocalDateTime parsedTime = LocalDateTime.parse(input);
ZonedDateTime zonedDateTime = ZonedDateTime.of(parsedTime, ZoneId.of("GMT"));
String output = DateTimeFormatter.ofPattern("EEE MMM dd yyyy HH:mm:ss Z '('z')'")
.format(zonedDateTime);
System.out.print(output);
}
}
Объекты даты и времени не имеют "формата"
У меня есть календарь, который возвращается в следующем формате (это тип Java Calendar): 2020-02-15T00:00:00.
Нет, ты не
Calendar
Объект не имеет формата. Только текст, представляющий значение даты и времени, имеет формат.
следующий календарь, как этот, и сохраните тип календаря: пн 05 ноя 201 14:08:58 GMT+0000 (среднее время по Гринвичу)?
Там нет такого понятия, как Calendar
объект с этим форматом, как Calendar
не имеет формата и не является текстом.
Научитесь искать переполнение стека перед публикацией. Это уже освещалось много раз.
java.time
Ужасный Calendar
класс был вытеснен несколько лет назад классом java.time с принятием JAR 310. Никогда не используйте Calendar
,
Получить текущее время в UTC с помощью OffsetDateTime
учебный класс.
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;
Чтобы сгенерировать текст в стандартном формате ISO 8601, позвоните toString
, Чтобы сохранить значение даты и времени в виде текста, используйте эти форматы - вот почему они были изобретены.
Чтобы создать текст в другом формате, используйте DateTimeFormatter
учебный класс. Это было рассмотрено много раз, поэтому ищите переполнение стека.
Перерабатывать
Если дано GregorianCalendar
объект, немедленно преобразуйте в ZonedDateTime
объект путем вызова новых методов, добавленных к старым классам.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
В ролях, если это будет необходимо.
ZonedDateTime zdt = ( (GregorianCalendar) myCal ).toZonedDateTime() ;
Тогда используйте DateTimeFormatter
генерировать текст в нужном вам формате.
Предполагая, что у вас есть экземпляр Календаря Календаря, вы должны быть в состоянии сделать это:
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss Z");
String result = dateFormat.format(cal.getTime());
getTime дает вам дату для SimpleDateFormat.
Это самый простой способ справиться с объектом календаря. Также наиболее подвержен ошибкам. Я согласен со всеми комментариями о том, что вы должны использовать java.time, но кто я такой, чтобы говорить вам, что делать.
Вы можете использовать SimpleDateFormat
import java.text.DateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class HelloWorld
{
public static void main(String[] args)
{
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String dateString = "2020-02-15T00:00:00";
try {
Date parsed = format.parse(dateString);
System.out.print(parsed.toString());
}
catch(ParseException pe) {
System.out.println("ERROR: Cannot parse \"" + dateString + "\"");
}
}
}