본문 바로가기
카테고리 없음

[JAVA] Calendar 와 ,LocalDateTime으로 날짜 연산의 결과가 틀리게 출력 됩니다.

by Hwoarang757 2024. 5. 15.

원하는 결과는 LocalDate나 , LocalDateTime으로 확인 할 수 있었습니다.

package com.test;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.attribute.FileTime;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

public class DateTest {

	public static void main(String[] args) throws Exception {

		//파일 생성일시는 2024-01-28 10:14:07
		FileTime creationTime = (FileTime)Files.getAttribute(new File("D:/text23.txt").toPath() , "creationTime");

		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat parseFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		Date date = parseFmt.parse(
				String.format("%s 23:59:59",fmt.format(creationTime.toMillis()))
				);

		// Calendar로 Date 연산 시에 -> 2023-12-30 23:59:59
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DATE, -1);
		System.out.println(parseFmt.format(calendar.getTime()));


		// LocalDate로 연산 시에 - 원하는 예상 결과 출력 됨 2024-01-27 23:59:59
		LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
		localDateTime = localDateTime.minusDays(1);
		Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
		System.out.println(parseFmt.format(Date.from(instant)));


	}

}