提取给定日期的前一天

/**

* 获取上一天的信息

* @param nowDate format:2001-11-11

* @retirm

*/

public static String getLastDayInfo(String nowDate) {

String yesterday = "";

int year = 0;

int month = 0;

int day = 0;

try {

System.out.println("nowDate: " + nowDate);

year = Integer.parseInt(nowDate.substring(0, nowDate.indexOf("-")));

month = Integer.parseInt(nowDate.substring(nowDate.indexOf("-") + 1,

nowDate.lastIndexOf("-")));

day = Integer.parseInt(nowDate.substring(nowDate.lastIndexOf("-") + 1));



System.out.println("nowYear = " + year);

System.out.println("nowMonth = " + month);

System.out.println("dayDay = " + day);



day = day - 1;

if (day == 0) {

month = month - 1;

if (month == 0) {

month = 12;

day = 31;

year = year - 1;

}

else {

switch (month) {

case 1:

day = 31;

break;

case 3:

day = 31;

break;

case 5:

day = 31;

break;

case 7:

day = 31;

break;

case 8:

day = 31;

break;

case 10:

day = 31;

break;

case 12:

day = 31;

break;

case 4:

day = 30;

break;

case 6:

day = 30;

break;

case 9:

day = 30;

break;

case 11:

day = 30;

break;

case 2:

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {

day = 29;

}

else {

day = 28;

}

}

}

}

String monthStr = "";

String dayStr = "";

if (month < 10) {

monthStr = "0" + String.valueOf(month);

}

else {

monthStr = String.valueOf(month);

}

if (day < 10) {

dayStr = "0" + String.valueOf(day);

}

else {

dayStr = String.valueOf(day);

}



yesterday = String.valueOf(year) + "-" + monthStr + "-" + dayStr;



}

catch (Exception e) {

System.err.println(e);

}

return yesterday;

}
在Java中计算给定日期是一年中的第几天,你可以按照以下步骤解题: 1. **获取当前年份和月份数**: - 使用`java.time.LocalDate`类获取当前日期,然后提取出年份(`getYear()`)和月份(`getMonthValue()`),因为月份是从0开始计数的,所以需要加1。 2. **计算该月有多少天**: - 获取当前年份的所有月份(`ChronoField.MONTH_OF_YEAR`),遍历这个范围并累计每个月的天数,直到达到给定的月份。可以使用`java.time.MonthDay`类辅助计算。 3. **计算给定日期在当前月内的位置**: - 如果输入的日期早于当前日期,说明在同一年的不同月份,减去前几个月的总天数即可。如果相等或晚于,直接算作当前月份的天数。 4. **计算剩余的天数**: - 如果给定的日期是在下个月,那么加上下个月的第一天,再减去当天(`getOfMonth()`)。注意闰年的处理,2月的天数可能会是28或29天。 5. **返回结果**: - 将所有部分相加得到最终结果。 ```java import java.time.LocalDate; import java.time.temporal.ChronoField; public int calculateDay(LocalDate date) { LocalDate currentDate = LocalDate.now(); int year = currentDate.getYear(); int month = currentDate.getMonthValue() + 1; // 加一,因为月份从1开始 // 计算到给定月份之前的所有月的天数 int daysBeforeGivenMonth = 0; for (int i = 1; i < month; i++) { daysBeforeGivenMonth += LocalDate.of(year, i, 1).until(currentDate, ChronoUnit.MONTHS); } // 确定给定日期在当前月的位置 if (date.isBefore(currentDate)) { // 同年不同月的情况 return daysBeforeGivenMonth + date.getDayOfMonth(); } else { // 当月或以后 LocalDate nextMonthFirstDay = date.with(TemporalAdjusters.nextMonth第一天()); return daysBeforeGivenMonth + date.getDayOfMonth() - nextMonthFirstDay.getDayOfMonth() + 1; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值