在Java中玩转时间

1 获取前几个月每个月的第一天和最后一天

(1)我们先来看看获取这个月的第一天和最后一天的日期的代码:

public static void main(String[] args) {
    SimpleDateFormat sdfMonthDay = new SimpleDateFormat("yyyy-MM-dd");

    Calendar calendar = Calendar.getInstance();
    System.out.println("现在是什么时间: " + sdfMonthDay.format(calendar.getTime()));

    calendar.set(Calendar.DAY_OF_MONTH, 1);
    System.out.println("这个月的一号是什么时候.....: " + sdfMonthDay.format(calendar.getTime()));

    int maxCurrentMonthDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println("这个月有几天:" + maxCurrentMonthDay);

    calendar.set(Calendar.DAY_OF_MONTH, maxCurrentMonthDay);
    System.out.println("这个月最后一天是什么时候:" + sdfMonthDay.format(calendar.getTime()));
}

输出:

现在是什么时间: 2019-08-29
这个月的一号是什么时候.....: 2019-08-01
这个月有几天:31
这个月最后一天是什么时候:2019-08-31

(2)获取上个月的第一天和最后一天的代码:

public static void main(String[] args) {
    SimpleDateFormat sdfMonthDay = new SimpleDateFormat("yyyy-MM-dd");
    
    Calendar previousCalendar = Calendar.getInstance();
    previousCalendar.add(Calendar.MONTH, -1);
    System.out.println("上个月的现在是什么时间: " + sdfMonthDay.format(previousCalendar.getTime()));

    previousCalendar.set(Calendar.DAY_OF_MONTH, 1);
    System.out.println("上个月的一号是什么时候.....: " + sdfMonthDay.format(previousCalendar.getTime()));

    int maxPreviousMonthDay = previousCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println("上个月的有几天.....: " + maxPreviousMonthDay);

    previousCalendar.set(Calendar.DAY_OF_MONTH, maxPreviousMonthDay);
    System.out.println("上个月的最后一天是什么时候.....: " + sdfMonthDay.format(previousCalendar.getTime()));

}

输出:

这个月最后一天是什么时候:2019-08-31
上个月的现在是什么时间: 2019-07-29
上个月的一号是什么时候.....: 2019-07-01
上个月的有几天.....: 31
上个月的最后一天是什么时候.....: 2019-07-31

2 昨天这个时候

public static void main(String[] args) {
    SimpleDateFormat sdfMonthDay = new SimpleDateFormat("yyyy-MM-dd");
    Calendar yesterdayCalendar = Calendar.getInstance();
    yesterdayCalendar.add(Calendar.DATE, -1);
    System.out.println("昨天是什么时候.....: " + sdfMonthDay.format(yesterdayCalendar.getTime()));
} 

输出:

昨天是什么时候.....: 2019-08-28

3 Java8 中的时间操作

(1)LocalDate、LocalTime、LocalDateTime
Java8的这种时间API是为了弥补之前的Java的时间API的一些问题,比如之前的API不是线程安全的,

LocalDate 这个是日期相关的工具类,在这里你可以用比较简单的方式取得日期的年月份的数据

LocalDate date = LocalDate.now();
System.out.println("date: " + date);
System.out.println("date.getYear(): " + date.getYear());
System.out.println("date.getMonth(): " + date.getMonth().getValue());
System.out.println("date.getDayOfMonth(): " + date.getDayOfMonth());
System.out.println("date.getDayOfWeek(): " + date.getDayOfWeek().getValue());
System.out.println("date.getDayOfYear(): " + date.getDayOfYear());
System.out.println("date.lengthOfMonth(): " + date.lengthOfMonth());
System.out.println("date.lengthOfYear(): " + date.lengthOfYear());

LocalDate date1 = LocalDate.of(2019, 3, 18);
System.out.println("date1: " + date1);

输出

date: 2019-09-01
date.getYear(): 2019
date.getMonth(): 9
date.getDayOfMonth(): 1
date.getDayOfWeek(): 7
date.getDayOfYear(): 244
date.lengthOfMonth(): 30
date.lengthOfYear(): 365
date1: 2019-03-18

LocalTime 这个是时间相关的工具类,在这里你可以用比较简单的方式取得时间的小时、分组、秒的数据

LocalTime localTime = LocalTime.now();
System.out.println("localTime: " + localTime);

LocalTime localTime1 = LocalTime.of(12, 1, 1);
System.out.println("localTime1: " + localTime1);

输出

localTime: 20:28:51.046843200
localTime1: 12:01:01

LocalDateTime 这个更像是日期和时间的结合体,你可用使用他轻而易举的创建时间。

LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("localDateTime: " + localDateTime);
System.out.println("localDateTime.getHour(): " + localDateTime.getHour());
System.out.println("localDateTime.getMinute(): " + localDateTime.getMinute());
System.out.println("localDateTime.getSecond(): " + localDateTime.getSecond());

输出

localDateTime: 2019-09-01T20:28:51.046843200
localDateTime.getHour(): 20
localDateTime.getMinute(): 28
localDateTime.getSecond(): 51
时间操作Java开发是非常常见的,因此熟练掌握时间操作的技巧对于Java程序员来说是非常重要的。下面我将介绍一些常用的时间操作技巧,帮助你更好地玩转时间操作。 1. 获取当前时间 获取当前时间可以使用Java的Date类,代码如下: ``` Date now = new Date(); ``` 2. 格式化时间时间按照一定的格式进行输出,可以使用Java的SimpleDateFormat类,代码如下: ``` SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String dateStr = sdf.format(now); ``` 其,"yyyy年MM月dd日 HH:mm:ss"是日期格式,可以根据需要进行修改。 3. 时间比较 比较两个时间的先后顺序,可以使用Java的Date类的compareTo方法,代码如下: ``` Date date1 = sdf.parse("2021-01-01 12:00:00"); Date date2 = sdf.parse("2021-01-02 12:00:00"); int result = date1.compareTo(date2); if (result < 0) { System.out.println("date1在date2之前"); } else if (result > 0) { System.out.println("date1在date2之后"); } else { System.out.println("date1和date2在同一时刻"); } ``` 4. 时间加减 对时间进行加减操作,可以使用Java的Calendar类,代码如下: ``` Calendar calendar = Calendar.getInstance(); calendar.setTime(now); calendar.add(Calendar.DAY_OF_MONTH, 1);// 加一天 calendar.add(Calendar.HOUR_OF_DAY, 1);// 加一小时 calendar.add(Calendar.MINUTE, 30);// 加30分钟 Date newTime = calendar.getTime(); ``` 5. 时间差计算 计算两个时间之间的时间差,可以使用Java的Date类和TimeUnit类,代码如下: ``` Date date1 = sdf.parse("2021-01-01 12:00:00"); Date date2 = sdf.parse("2021-01-02 12:00:00"); long diff = date2.getTime() - date1.getTime(); long days = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); System.out.println("两个时间之间相差:" + days + "天"); ``` 以上就是一些常用的时间操作技巧,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值