Самый простой способ конвертировать Java Calendar в ISO - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть Календарь, который возвращается в следующем формате (это тип Java Calendar): 2020-02-15T00:00:00. Какой самый простой и короткий способ преобразовать его в следующий календарь, как этот, и сохранить тип календаря: Mon Nov 05 2018 14:08:58 GMT+0000 (Greenwich Mean Time)?

В JavaScript мы можем использовать что-то вроде var date = new Date();

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

Объекты даты и времени не имеют «формата»

У меня есть Календарь, который возвращается в следующем формате (это тип Java Calendar): 2020-02-15T00: 00: 00.

Нет, ты не.

A Calendar объект не имеет формата. Только текст, представляющий значение даты и времени, имеет формат.

следующий календарь, подобный этому и сохраняющий тип календаря: понедельник, 05 ноября 2018 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 для генерации текста в нужном формате.

0 голосов
/ 05 ноября 2018

Если у вас есть экземпляр Календаря Календаря, вы должны быть в состоянии сделать это:

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss Z");
String result = dateFormat.format(cal.getTime());

getTime дает вам дату для SimpleDateFormat.

Это самый простой способ справиться с объектом календаря. Также наиболее подвержен ошибкам. Я согласен со всеми комментариями о том, что вы должны использовать java.time, но кто я такой, чтобы говорить вам, что делать.

0 голосов
/ 05 ноября 2018

Вот пример использования строки, преобразованной в ваш пример формата с использованием 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);
    }
}
0 голосов
/ 05 ноября 2018

Вы можете использовать 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 + "\"");
    }
  }
}
...