Вопрос по java, datetime, java-8 – @DevOma, будь осторожен с программированием. Не учите это для удовольствия, потому что вы можете никогда не получить работу

9

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

    Date d = new SimpleDateFormat("yyyy-MM-dd").parse("2013-01-02");
    Date t = new SimpleDateFormat("hh:mm:ss").parse("04:05:06");
    LocalDate datePart = new LocalDate(d);
    LocalTime timePart = new LocalTime(t);
    LocalDateTime dateTime = datePart.toLocalDateTime(timePart);
    System.out.println(dateTime);
Вашt на самом деле не время. Это свидание 1 января 1970 года в 4:05. Boris the Spider
@Boris the Spider: это не мешает вам относиться к нему как к времени и извлекать часть времени, например,t.toInstant().atZone(ZoneId.systemDefault()).toLocalTime(), Вы должны иметь дело с этим шаблоном, например, когда вы сталкиваетесь сjava.sql.Time пример… Holger

Ваш Ответ

2   ответа
11

Вам просто нужно использовать правильные методы вместо вызова конструкторов. использованиеparse чтобы создать объекты локальной даты и местного времени, а затем передать два объектаof методLocalDateTime:

    LocalDate datePart = LocalDate.parse("2013-01-02");
    LocalTime timePart = LocalTime.parse("04:05:06");
    LocalDateTime dt = LocalDateTime.of(datePart, timePart);

РЕДАКТИРОВАТЬ

Видимо, нужно объединить дваDate объекты вместо 2 строк. Я думаю, вы можете сначала преобразовать две даты в строки, используяSimpleDateFormat, Затем используйте методы, показанные выше.

String startingDate = new SimpleDateFormat("yyyy-MM-dd").format(startDate);
String startingTime = new SimpleDateFormat("hh:mm:ss").format(startTime);
@deepak rawat: начало этого ответа показывает, как преобразоватьString вLocalDate соответственноLocalTime. Holger
Прекрасная демонстрация простоты нового API DateTime. Я мог бы предложить указать, почему вышеупомянутое это работает - то есть, чтоt на самом деле дата, и нет поддержки «времени» до Java 8. Boris the Spider
String startDate = this.startDate; String startTime = this.startTime; LocalDateTime dt = LocalDateTime.of (начальная дата, начальная время); deepak rawat
его строка ошибки несовместимого типа не может быть преобразована в LocalDate deepak rawat
Вы уверены, что используете такие методы, какparse а такжеof и не присваивать строку напрямуюdatePart? @deepakrawat Sweeper
4

Чтобы объединить дату и время в Java 8 вы можете использоватьjava.time.LocalDateTime, Это также позволяет форматировать сjava.time.format.DateTimeFormatter.

Пример программы:

public static void main(String[] args) {
        LocalDate date = LocalDate.of(2013, 1, 2);
        LocalTime time = LocalTime.of(4, 5, 6);
        LocalDateTime localDateTime = LocalDateTime.of(date, time);
        DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM d yyyy  hh:mm a");
        System.out.println(localDateTime.format(format));
    }
Я получил предупреждение здесь. Для вызова требуется уровень API 26 (текущий минимум 15): java.time.LocalDate # of DevOma
@DevOma, будь осторожен с программированием. Не учите это для удовольствия, потому что вы можете никогда не получить работу Jay Smith

Похожие вопросы