gpt4 book ai didi

java - 上一个日历日期未按预期到来,需要解决方法

转载 作者:行者123 更新时间:2023-12-01 10:37:53 25 4
gpt4 key购买 nike

The following code gives incorrect output - 29/01/2015, should give 29/12/2015. Please provide a work around to get the correct value.

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CheckTime{

public static void main(String... x) throws Exception{

DateFormat formatter = new SimpleDateFormat("dd/mm/yyyy");
Date date = formatter.parse("31/12/2015");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, -1);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);

System.out.println(day+"/"+month+1+"/"+year);
}
}

最佳答案

格式错误

正如评论所讨论的,格式模式使用小写 mm(小时中的分钟),而本应使用大写 MM(一年中的月份)。

java.time

Java 8 及更高版本附带 java.time取代问题中使用的旧日期时间类的框架。这些新类(class)是一个巨大的改进。避免旧的。

新类中有一个用于跟踪仅日期值,没有时间或时区: LocalDate .

标准ISO 8601默认情况下,在解析和生成日期时间值的字符串表示形式时使用格式。由于您的字符串输入采用不同的格式,因此我们必须指定编码模式。

String input = "31/12/2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "dd/MM/yyyy" );
LocalDate localDate = LocalDate.parse ( input, formatter );

我们可以轻松找到前几天和后几天。注意 immutable objects 的使用图案。我们不是改变对象的成员字段,而是根据旧对象的值创建一个新对象。 value objects 更安全例如日期时间。

LocalDate previousDay = localDate.minusDays ( 1 );
LocalDate nextDay = localDate.plusDays ( 1 );

转储到控制台。

System.out.println ( "localDate: " + localDate + "  previousDay: " + previousDay + "  nextDay: " + nextDay  );

localDate: 2015-12-31 previousDay: 2015-12-30 nextDay: 2016-01-01

关于java - 上一个日历日期未按预期到来,需要解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com