java Calendar DateFormat 时间 日期 月份 格式化 第一天 最后一天

本文展示了如何使用Java中的SimpleDateFormat类进行日期格式化,并通过Calendar类操作日期,包括获取月初和月末的日期。

//格式化类,选择自己需要的格式化类 年月日

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


//日历类

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.DAY_OF_MONTH, 1);//当月的第一天

System.out.println(dateFormat.format(calendar.getTime()));


calendar.add(Calendar.MONTH, 1);//月份加1
calendar.set(Calendar.DAY_OF_MONTH, 0);//当月的最后一天,0就代表上个月的最后一天

System.out.println(dateFormat.format(calendar.getTime()));
<think> 我们在引用中看到三种方法:传统Calendar类(引用1和2)、Java 8的TemporalAdjusters(引用3)以及手动设置LocalDate(引用3)。用户需求是获取当前月份第一天和当前时间。 注意:用户需要两个值:当前月份第一天日期)和当前时间日期时间)。当前时间可以直接用new Date()或LocalDateTime.now(),但第一天需要计算。 我们将提供两种方案: 1. 使用传统的java.util.Calendar(适用于Java 7及以前) 2. 使用Java 8的java.time API(推荐) 注意:当前时间可以用new Date()(传统)或LocalDateTime.now()(Java 8)等获取。 由于用户需要当前月份第一天(只到日期)和当前时间日期时间),我们分别处理: 方案1(传统): - 获取当前时间:new Date() 或 Calendar.getInstance().getTime() - 获取当前月第一天:将Calendar设置为本月第一天时间部分可以设置为00:00:00(或者不设置时间部分,只取日期?),但用户要求的是日期,所以我们可以只取日期部分,或者如果需要日期时间,则设置为当天的开始。 方案2(Java 8): - 获取当前时间:LocalDateTime.now() - 获取当前月第一天:使用LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())得到LocalDate,然后可以加上时间部分(比如当天的开始时间)构成LocalDateTime,或者直接使用LocalDate表示第一天(如果只需要日期)。 根据用户需求描述,他需要“当前月份第一天”和“当前时间”。这里“当前月份第一天”通常指的是日期(没有时间部分),但有时也可能需要表示为当天的零点。而“当前时间”就是现在的日期时间。 因此,我们可以分别提供两种方式,并说明输出类型。 注意:用户没有明确要求输出格式,所以我们将给出对象示例以及如何格式化为字符串(如果需要的话)。 参考引用[3]中的方法,使用Java 8的API更加简洁和安全。 步骤: 1. 当前月份第一天:我们得到的是一个日期(LocalDate),而当前时间是一个日期时间(LocalDateTime)。 2. 如果用户需要将当前月份第一天也表示为日期时间(即当天的开始时刻),我们可以加上时间(00:00:00)。 下面分别用两种方式实现: 方案一:使用Java 8的API(推荐) - 当前月份第一天(作为日期,无时间): LocalDate firstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); - 如果需要当天的开始时刻(即第一天的00:00:00): LocalDateTime firstDayWithTime = firstDay.atStartOfDay(); - 当前时间:LocalDateTime now = LocalDateTime.now(); 方案二:使用旧的Calendar API(兼容旧版本) - 获取当前时间:Date now = new Date(); 或者 Calendar.getInstance().getTime(); - 获取当前月第一天(并设置为零点): Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); Date firstDay = cal.getTime(); 但是注意:用户需要当前月份第一天日期)和当前时间日期时间)。在传统方式中,我们可以分别获取: Date now = new Date(); // 当前时间 Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); // 将时间部分清零,得到第一天的零点 cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); Date firstDay = cal.getTime(); 然而,在Java 8中,我们更推荐使用java.time包。 因此,我们将重点展示Java 8的两种方式(一种只取日期,另一种取日期时间),以及旧版API的方式。 另外,根据引用[3],还有一个手动设置的方式(Java 8): LocalDate today = LocalDate.now(); LocalDate firstDay = today.withDayOfMonth(1); LocalDate lastDay = today.withDayOfMonth(today.lengthOfMonth()); 我们可以用这个方式获取第一天,比TemporalAdjusters更简洁。 因此,我们可以这样写(Java 8): LocalDate firstDayOfMonth = LocalDate.now().withDayOfMonth(1); 综合考虑,我们提供以下示例: 示例1:Java 8(使用LocalDate和LocalDateTime) 示例2:传统Calendar(使用Date) 另外,用户可能需要输出字符串,我们可以使用DateTimeFormatter(Java 8)或SimpleDateFormat(传统)进行格式化。 由于用户没有指定格式,我们使用标准格式(ISO_LOCAL_DATE或ISO_LOCAL_DATE_TIME)展示。 代码示例: 1. Java 8版本(推荐): ```java import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class CurrentMonthFirstDayCurrentTime { public static void main(String[] args) { // 获取当前月份第一天日期部分) LocalDate firstDayOfMonth = LocalDate.now().withDayOfMonth(1); System.out.println("当前月份第一天日期): " + firstDayOfMonth); // 如果需要第一天的开始时间日期时间) LocalDateTime firstDayWithTime = firstDayOfMonth.atStartOfDay(); System.out.println("当前月份第一天的开始时间: " + firstDayWithTime); // 获取当前时间日期时间) LocalDateTime currentTime = LocalDateTime.now(); System.out.println("当前时间: " + currentTime); // 如果需要格式化输出 DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println("格式化后的当前月份第一天: " + firstDayOfMonth.format(dateFormatter)); System.out.println("格式化后的当前时间: " + currentTime.format(dateTimeFormatter)); } } ``` 2. 传统Calendar版本(兼容Java 7及之前): ```java import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class CurrentMonthFirstDayCurrentTimeLegacy { public static void main(String[] args) { // 获取当前时间 Date now = new Date(); System.out.println("当前时间: " + now); // 获取当前月份第一天(并设置为零点) Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); Date firstDayOfMonth = cal.getTime(); System.out.println("当前月份第一天的开始时间: " + firstDayOfMonth); // 格式化输出 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("格式化后的当前月份第一天: " + dateFormat.format(firstDayOfMonth)); System.out.println("格式化后的当前时间: " + dateTimeFormat.format(now)); } } ``` 注意:在传统版本中,我们直接使用Date对象,它包含日期时间。我们将第一天时间部分设置为0,然后输出。 用户可以根据自己使用的Java版本来选择。 此外,用户可能只需要第一天日期(不带时间),但在传统Date中,它总是包含时间。因此,我们格式化时只显示日期部分,但对象本身是有时间的。 总结:我们提供了两种方案,并展示了如何获取和格式化输出。 </think> 以下是Java中获取当前月份第一天和当前时间的完整方法,结合传统方法和Java 8+新特性: ### 1. Java 8+推荐方案(使用`java.time` API) ```java import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.TemporalAdjusters; public class DateTimeExample { public static void main(String[] args) { // 获取当前月份第一天日期类型) LocalDate firstDay = LocalDate.now().withDayOfMonth(1); System.out.println("本月第一天: " + firstDay); // 获取当前精确时间日期时间类型) LocalDateTime currentTime = LocalDateTime.now(); System.out.println("当前时间: " + currentTime); // 获取当月第一天开始时间(带时间部分) LocalDateTime firstDayWithTime = firstDay.atStartOfDay(); System.out.println("当月第一天起始时间: " + firstDayWithTime); } } ``` ### 2. 传统方案(Java 7及更早) ```java import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; public class LegacyDateTimeExample { public static void main(String[] args) { // 获取当前月份第一天 Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); Date firstDay = cal.getTime(); // 获取当前精确时间 Date currentTime = new Date(); // 格式化输出 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); System.out.println("本月第一天: " + sdf.format(firstDay)); System.out.println("当前时间: " + sdf.format(currentTime)); } } ``` ### 关键说明: 1. **当前月份第一天**: - Java 8+:`LocalDate.now().withDayOfMonth(1)` 或 `LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())`[^3] - 传统方法:设置`Calendar.DAY_OF_MONTH=1`并清除时间字段[^2] 2. **当前时间**: - Java 8+:`LocalDateTime.now()`(纳秒精度) - 传统方法:`new Date()`(毫秒精度) 3. **时间精度**: - Java 8+方案自动处理闰年、时区等问题(推荐) - 传统方案需手动重置时间字段(时/分/秒/毫秒) ### 注意事项: 1. 时区考虑:若需特定时区,Java 8使用`LocalDateTime.now(ZoneId.of("Asia/Shanghai"))` 2. 性能优化:避免在循环中重复调用`LocalDate.now()`,应缓存当前日期[^3] 3. 格式化:使用`DateTimeFormatter`(Java 8)或`SimpleDateFormat`(传统)自定义输出格式 ```mermaid graph TD A[获取当前时间] --> B{Java版本} B -- Java 8+ --> C[使用LocalDateTime.now] B -- Java 7- --> D[使用new Date] A --> E[获取当月第一天] E -- Java 8+ --> F[LocalDate.now.withDayOfMonth 1] E -- Java 7- --> G[Calendar.set DAY_OF_MONTH=1] F --> H[组合日期时间 firstDay.atStartOfDay] G --> I[重置时间字段为00:00:00] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值