Вычисление миллисекунд между заданными датами


import java.util.Calendar;
import java.util.Date;

public class Main {

	public static void main(String[] args) {
		Calendar cl = Calendar.getInstance();
		Calendar cl2 = Calendar.getInstance();
		cl.set(Calendar.YEAR, 2021);
		cl.set(Calendar.MONTH, Calendar.JUNE);
		cl.set(Calendar.DAY_OF_MONTH, 14);
		cl2.set(Calendar.YEAR, 2021);
		cl2.set(Calendar.MONTH, Calendar.MAY);
		cl2.set(Calendar.DAY_OF_MONTH, 14);

		Date date = cl.getTime();
		Date date2 = cl2.getTime();
		System.out.println(date.getTime() - date2.getTime());

	}

}

И тоже нет. ВОТ запускаю я сегодня. А сегодня 15.06.2021 и что я вижу? Что вычисление идет с 14, программа должна использовать текущую дату.

package com.gmail.starir70;

import java.util.Calendar;
import java.util.Date;

public class Main {

	public static void main(String[] args) {
		Calendar cl = Calendar.getInstance();
		Calendar cl2 = Calendar.getInstance();
		cl.get(Calendar.YEAR);
		cl.get(Calendar.MONTH);
		cl.get(Calendar.DATE);

		cl2.get(Calendar.YEAR);
		cl2.set(Calendar.MONTH, Calendar.MAY);
		cl2.get(Calendar.DATE);

		Date date = cl.getTime();
		System.out.println(date);
		Date date2 = cl2.getTime();
		System.out.println(date2);

		System.out.println(date.getTime() - date2.getTime());

	}

}

Вопрос для экономии времени: как откатить месяц на 1 назад, чтобы не задавать май. Т.к. я предполагаю,что вы скажете про эту часть, что нужно было не задать май, а откатить его назад
Что то типа этого cl.get(Calendar.MONTH-1); не работает. От переменной cl не отнимешь естественно, тем более от date. Я

Вот так.

Calendar cl = Calendar.getInstance();
		Calendar cl1 = Calendar.getInstance();

		cl1.set(Calendar.MONTH, cl.get(Calendar.MONTH) - 1);

		SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy");
		System.out.println(sdf.format(cl.getTime()));
		System.out.println(sdf.format(cl1.getTime()));
		
		Date dateOne = cl.getTime();
		Date dateTwo = cl1.getTime();

		long t = dateOne.getTime() - dateTwo.getTime();
		System.out.println(t + " ms ");

А что, так можно было :wink: просто в лекции нигде не указывалось, что можно оперировать данными cl1.set(Calendar.MONTH, cl.get(Calendar.MONTH) - 1);
то есть здесь мы одновременно для календаря cl получаем текущий месяц и при этом для календаря cl1 устанавливаем этот же месяц -1. Далее выводим дату в простом формате. Получаем дату из календаря для получения разницы миллисекунд.
Скажу честно из полученных знаний на лекции я бы в жизни не додумалась так сделать.Нужно было бы дополнительно искать информацию, а это время. Может быть если лекция очная или в реальном времени, то как то хоть вопрос задашь. А так в видеоуроке не слышно даже какие вопросы задают студенты.

То есть работает только такой синтаксис и мою программу для правильной работы можно преобразовать так:

		Calendar cl2 = Calendar.getInstance();
		cl.get(Calendar.YEAR);
		cl.get(Calendar.MONTH);
		cl.get(Calendar.DATE);

		cl2.get(Calendar.YEAR);
		cl2.set(Calendar.MONTH, cl2.get(Calendar.MONTH) - 1);
		cl2.get(Calendar.DATE);

		Date date = cl.getTime();
		System.out.println(date);
		Date date2 = cl2.getTime();
		System.out.println(date2);

		System.out.println(date.getTime() - date2.getTime());

Да тут все проще. Конструкция

 cl.get(Calendar.MONTH) - 1

возвращает значение типа int
а для метода set вторым параметром также нужен int, так что это просто в одну строку, то что можно было сделать в две.

По вашему решению а вот зачем эти строки?

cl.get(Calendar.YEAR);
		cl.get(Calendar.MONTH);
		cl.get(Calendar.DATE);

		cl2.get(Calendar.YEAR);

???

Эм, ну да, получается не за чем. Дату мы получаем из этой строки Date date = cl.getTime(); хоть не такой красивый формат как SimpleDateFormat, но все же…
Календарем откатываем месяц назад. А миллисекунды считаем: date.getTime() - date2.getTime().

Ну прАстите ) мои знания еще слишком зыбки и не разложены по полочкам.