java 时间计算 格式化的相关记录(后续)

本文详细介绍了如何使用Java进行日期解析和时间差计算,包括字符串到日期格式的转换、时间差计算及时间范围内的判断。通过实例代码展示了如何实现这些功能,适合Java开发人员学习。
1.
String start="8:00:00";
SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss");
System.out.println(df.parse(start));
得到的是1970年的: Thu Jan 01 08:00:00 CST 1970



2.
计算相同格式的两个时间的时间差 :如07:38-00:41,结果以XX小时XX分钟形式输出
private double countOverTime(String endtime,String starttime) throws ParseException{
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); 
Date end=df.parse(endtime);
Date start=df.parse(starttime);
long result=(long)(end.getTime()-start.getTime())/1000; 
long hour=result%(24*3600)/3600;
long min=result%3600/60;
return hour+"小时"+min+"分钟";
}

3.
如果给你一个时间如orderMinTime="10:15",orderMaxTime="23:30"分别计算和当前时间的时间差,
(要注意不要使用1.的方法格式化,原因如1.)
正确做法如下:
String[] mintimes=orderMinTime.split(":");
String[] maxtimes=orderMaxTime.split(":");
Calendar ca=Calendar.getInstance();
ca.set(Calendar.HOUR_OF_DAY, Integer.parseInt(mintimes[0]));
ca.set(Calendar.MINUTE, Integer.parseInt(mintimes[1]));
long min=ca.getTime().getTime();
ca.set(Calendar.HOUR_OF_DAY, Integer.parseInt(maxtimes[0]));
ca.set(Calendar.MINUTE, Integer.parseInt(maxtimes[1]));
long max=ca.getTime().getTime();
long bookTime=new Date().getTime();//预定时间定义为当前时间
if(bookTime>=min&&bookTime<=max) bookStatus="1";//可预订
else bookStatus="0";//不可预订


Java 中进行时间计算时,可以使用多种方式实现,包括传统的 `java.util.Calendar` 和 `java.util.Date` 类,以及 Java 8 引入的 `java.time` 包。这些方法适用于不同的使用场景和版本要求。 ### 使用 `Calendar` 进行时间计算 `Calendar` 类提供了对日期和时间字段的操作能力,可以用于进行时间的加减、获取特定时间字段等操作。例如,计算某个日期加上一定天数后的新日期: ```java import java.util.Calendar; import java.util.GregorianCalendar; public class CalendarExample { public static void main(String[] args) { Calendar calendar = new GregorianCalendar(); calendar.set(2023, Calendar.JANUARY, 1); // 设置日期为2023年1月1日 calendar.add(Calendar.DAY_OF_MONTH, 10); // 增加10天 System.out.println("增加10天后的日期: " + calendar.getTime()); } } ``` 通过 `Calendar` 的 `add()` 方法可以对日期进行加减操作,如增加天数、月数或年数。该方法适用于 Java 1.4 及以上版本[^3]。 ### 使用 `LocalDate` 和 `LocalDateTime` 进行时间计算Java 8+) Java 8 引入了 `java.time` 包,其中 `LocalDate`、`LocalDateTime` 和 `Duration` 等类提供了更现代化的日期和时间处理方式。例如,计算两个日期之间的天数差: ```java import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class LocalDateExample { public static void main(String[] args) { LocalDate startDate = LocalDate.of(2023, 1, 1); LocalDate endDate = LocalDate.of(2023, 1, 10); long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); System.out.println("两个日期之间的天数差: " + daysBetween); } } ``` `ChronoUnit.DAYS.between()` 方法可以直接计算两个日期之间的天数差,适用于需要精确计算日期间隔的场景。此外,`LocalDate` 和 `LocalDateTime` 类提供了 `plusDays()`、`plusMonths()` 等方法用于日期的加减操作[^3]。 ### 使用正则表达式处理日期输入并进行计算 在某些场景中,用户输入的日期可能需要进行格式验证和解析。例如,通过正则表达式确保输入格式为 `yyyy-MM-dd`,然后将其解析为 `Date` 对象进行计算: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateParsingExample { public static void main(String[] args) throws ParseException { String inputDate = "2023-01-01"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(inputDate); System.out.println("解析后的日期: " + date); } } ``` 在实际应用中,可以使用 `while` 循环和 `try-catch` 结构来处理用户输入错误,并通过 `continue` 实现重新输入的逻辑。这种方法适用于需要从用户输入中获取日期并进行后续处理的场景[^2]。 ### 使用 `SimpleDateFormat` 格式化日期输出 在进行日期计算后,通常需要将结果以特定格式输出。`SimpleDateFormat` 类可以用于格式化日期对象为字符串: ```java import java.text.SimpleDateFormat; import java.util.Date; public class DateFormatExample { public static void main(String[] args) { Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = sdf.format(now); System.out.println("当前时间格式化输出: " + formattedDate); } } ``` 此方法适用于需要将日期时间信息以特定格式展示的场景,如日志记录、用户界面显示等[^3]。 ### 计算有效期(生产日期 + 保质期) 在实际业务中,有时需要根据生产日期和保质期计算有效期。例如: ```java import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class ExpiryDateExample { public static void main(String[] args) { Date productionDate = new GregorianCalendar(2023, Calendar.JANUARY, 1).getTime(); int shelfLife = 10; // 保质期10天 Calendar calendar = new GregorianCalendar(); calendar.setTime(productionDate); calendar.add(Calendar.DAY_OF_MONTH, shelfLife); Date expiryDate = calendar.getTime(); System.out.println("有效期: " + expiryDate); } } ``` 该方法适用于食品、药品等需要计算有效期的场景[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值