关于日期计算的java代码
根据给定的文件标题、描述、标签以及部分内容,本文将详细介绍日期计算在Java中的实现方法。主要内容包括: 1. 计算两个日期之间的小时数与天数。 2. 对日期进行加减运算以获取新的日期。 3. 根据年份和周数获取该周的第一天和最后一天的具体日期。 ### 1. 计算两个日期之间的小时数与天数 计算两个日期之间的时间差是日期计算中的常见需求之一。这部分功能主要通过以下几种方式来实现: #### 方法一:使用 `java.util.Date` 和 `java.util.Calendar` ```java public static long getMillis(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.getTimeInMillis(); } public static String getAddNewDate(String dateTime, double newTime) { // ... (省略部分代码) long totalTime = (long) (getMillis(t1) + (newTime * 60 * 60 * 1000)); // ... (省略部分代码) } ``` 这里使用了 `Calendar` 类中的 `getTimeInMillis()` 方法来获取毫秒值,然后通过时间差计算小时数和天数。这种方式较为直观且易于理解,但需要注意的是,在实际应用时应该考虑到时区和夏令时的影响。 #### 方法二:使用 `java.time` 包下的类 Java 8 引入了新的日期时间 API,其中 `LocalDateTime`、`Duration` 和 `Period` 类提供了更为强大和灵活的时间处理功能。 ```java import java.time.LocalDateTime; import java.time.Duration; import java.time.Period; public static long getHoursBetween(LocalDateTime start, LocalDateTime end) { Duration duration = Duration.between(start, end); return duration.toHours(); } public static int getDaysBetween(LocalDateTime start, LocalDateTime end) { Period period = Period.between(start.toLocalDate(), end.toLocalDate()); return period.getDays(); } ``` 通过上述示例可以看出,使用 `java.time` 包可以更加简洁地完成日期间的时间差计算,并且提供了更丰富的功能,如 `Duration` 可用于计算两个时间点之间的持续时间,而 `Period` 用于计算两个日期之间的年月日间隔。 ### 2. 对日期进行加减运算以获取新的日期 对日期进行加减运算是另一个重要的功能。下面介绍两种常见的实现方式: #### 方法一:使用 `java.util.Calendar` ```java public static String addDaysToDate(String inputDate, int daysToAdd) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); try { Date date = sdf.parse(inputDate); calendar.setTime(date); calendar.add(Calendar.DATE, daysToAdd); // add days return sdf.format(calendar.getTime()); } catch (ParseException e) { e.printStackTrace(); return null; } } ``` 这种方法利用了 `Calendar` 类的 `add()` 方法来实现日期的加减运算。需要注意的是,在使用 `SimpleDateFormat` 时应确保格式正确无误。 #### 方法二:使用 `java.time` 包下的类 ```java import java.time.LocalDate; import java.time.temporal.ChronoUnit; public static String addDaysToDate(LocalDate date, int daysToAdd) { LocalDate newDate = date.plusDays(daysToAdd); return newDate.toString(); } ``` `java.time.LocalDate` 类提供了 `plusDays()` 方法来增加指定天数,也可以使用 `minusDays()` 来减少天数。 ### 3. 根据年份和周数获取该周的第一天和最后一天的具体日期 在实际应用场景中,有时需要获取特定周的第一天和最后一天的日期,这可以通过以下方法实现: #### 方法一:使用 `java.util.Calendar` ```java public static String[] getWeekDates(int year, int weekOfYear) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.WEEK_OF_YEAR, weekOfYear); calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String startDate = sdf.format(calendar.getTime()); calendar.add(Calendar.DAY_OF_WEEK, 6); String endDate = sdf.format(calendar.getTime()); return new String[]{startDate, endDate}; } ``` 这段代码首先设置了 `Calendar` 的年份和周数,并将星期一设为一周的开始,然后获取该周的第一天和最后一天的日期。 #### 方法二:使用 `java.time` 包下的类 ```java import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; public static String[] getWeekDates(int year, int weekOfYear) { LocalDate startDate = LocalDate.ofYearDay(year, 1) .with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)) .plusWeeks(weekOfYear - 1); LocalDate endDate = startDate.plusDays(6); return new String[]{startDate.toString(), endDate.toString()}; } ``` 通过使用 `TemporalAdjusters` 可以轻松地调整到周一,再根据周数加上相应的天数即可得到该周的起始和结束日期。 无论是传统的 `java.util.Date` 还是现代的 `java.time` 包,都可以方便地实现日期的计算。开发者可以根据具体需求和项目背景选择合适的方法。
/**
* @param args
* 我想做的是:希望在原来日期的基础上一块时间段得到一个新的日期
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//System.out.println(getDayByWeek(2010,45));
//System.out.println(getHourseBothDate("2010-1-14","2010-1-10"));
/*int totalHourse=49;
int day=(totalHourse%12==0)?(totalHourse/12):(totalHourse/12)+1;
System.out.println(day);*/
/*String d=getAddNewDate("2010-10-31 13:24:00",12);
System.out.println(d);*/
/*Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
String d=sdf.format(calendar.getTime());
System.out.println(d);*/
/*calendar.set(Calendar.YEAR, 2010);
calendar.set(Calendar.WEEK_OF_YEAR, 45);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Date d=calendar.getTime();
System.out.println(t.format(d));*/
//System.out.println(getHourseBothDate("2010-11-06 12:00:00","2010-11-06 15:30:10"));
System.out.println(getDayBothDate("2010-11-06 08:30:30","2010-11-06 23:30:10"));
//System.out.println(getAddNewDate("2010-11-06 08:30:30",24));
}
// 返回毫秒
public static long getMillis(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.getTimeInMillis();
}
// 日期加上一段时间得到新的日期
public static String getAddNewDate(String dateTiem,double newTime){
String[] times=dateTiem.split(" ");
String oldDate=times[0];
//将字符串转相应格式的时间类型
DateFormat t = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date t1 = null;
Date newTimes=null;
long totalTime=0;
try {
剩余6页未读,继续阅读
- wcy_dfgx2012-12-25挺好,对我现在做的项目有帮助!
- qq_268081612017-06-29还不错,学习学习
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#上位机开发源码 上位机项目源代码 采用基于RS485通讯总线的ModbusRtu协议,支持用户权限管理、sqlite数据库、实时曲线、历史曲线、历史报表、导出Excel、主界面布局可调带记忆等功能
- 基于plc的污水处理,组态王动画仿真,带PLC源代码,组态王源代码,图纸,IO地址分配
- Rhino(犀牛)插件ladybug-tools-1-8-0
- 三相10Kw光伏并网逆变器 包含全套理图 PCB 源代码
- MATLAB代码:考虑P2G和碳捕集设备的热电联供综合能源系统优化调度模型 关键词:碳捕集 综合能源系统 电转气P2G 热电联产 低碳调度 参考文档:Modeling and Optimiza
- 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程
- 基于mpx+vue+node.js的双端网盘系统的设计与实现源代码全套技术资料.zip
- welearn刷时长版本v3.0.bat
- 前端分析-2023071100789-y5
- 前端分析-2023071100789