如何制作一个程序来读取日期并计算到年底的剩余天数



我有一个非常简单的问题,我不知道如何在01/01/(用户年份(+1之前扣除用户的日期。我真的陷入了困境。

public static void main(String[] args)
{
String date;
Scanner teclado = new Scanner (System.in);
System.out.println("Dame una fecha formato dd/mm/yyyy");
date=teclado.next();
Date mydate =FinalAnio.ParseFecha(date);    
System.out.println(mydate);


}
public static Date ParseFecha(String fecha)
{
SimpleDateFormat formato = new SimpleDateFormat("dd/mm/yyyy");
Date fechaDate = null;
try 
{
fechaDate = formato.parse(fecha);
} 
catch (ParseException ex) 
{
System.out.println(ex);
}
return fechaDate;
}
  1. java.util的日期时间API及其格式API、SimpleDateFormat已过时且错误。建议完全停止使用它们,并切换到现代日期时间API。

    • 无论出于何种原因,如果您必须坚持使用Java 6或Java 7,您可以使用ThreeTen BackportJava.time的大部分功能向后移植到Java 6&7
    • 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查通过desugaring和如何在Android项目中使用ThreeTenABP提供的Java 8+API
  2. 不要将mm用于月份,因为它用于分钟。对于月份,正确的符号为MM。查看DateTimeFormatter以了解有关用于解析/格式化字符串/日期时间的各种符号的更多信息。

  3. 从Oracle的period and duration教程了解有关周期和持续时间的计算。同样值得浏览一下这个关于Durations的维基百科页面。

演示:

import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter date in the format dd/MM/yyyy: ");
String strDate = scanner.next();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.ENGLISH);
LocalDate userDate = LocalDate.parse(strDate, dtf);
// The date representing 01/01/(the user year)+1
LocalDate targetDate = userDate.withDayOfMonth(1).withMonth(1).plusYears(1);
System.out.println("User's date: " + strDate);
System.out.println("Target date: " + targetDate.format(dtf));
Period period = Period.between(userDate, targetDate);
System.out.printf("Difference: %d days %d months %d years%n", period.getDays(), period.getMonths(),
period.getYears());
System.out.println("The difference in terms of days: " + ChronoUnit.DAYS.between(userDate, targetDate));
}
}

样本运行:

Enter date in the format dd/MM/yyyy: 20/10/2015
User's date: 20/10/2015
Target date: 01/01/2016
Difference: 12 days 2 months 0 years
The difference in terms of days: 73

跟踪:日期时间了解现代日期时间API。

java.time

我建议您使用现代java日期和时间API java.time来进行日期工作。

DateTimeFormatter formatador = DateTimeFormatter.ofPattern("dd/MM/uuuu");
String entradaUsuario = "02/12/2020";
LocalDate fecha = LocalDate.parse(entradaUsuario, formatador);
LocalDate finDeAño = fecha.with(MonthDay.of(Month.DECEMBER, 31));
long diasRestantes = ChronoUnit.DAYS.between(fecha, finDeAño);
System.out.println(diasRestantes);

输出为:

29

在格式模式字符串中,大写的MM表示一年中的月份(小写的mm表示小时中的分钟,因此在这里没有用处(。uuuu代表年份(yyyy也适用(。

fecha.with(MonthDay.of(Month.DECEMBER, 31))将日期调整为同年的12月31日。

链接

Oracle教程:日期时间解释如何使用java.Time.

相关内容

  • 没有找到相关文章

最新更新