时间
Calendar
- Calendar 代表了系统当前时间的日历对象,可以单独修改、获取时间中的年月日
- 细节:Calendar 是一个抽象类,不能直接创建对象
import java.util.Calendar;
// 获取当前时间的日历对象
public static Calendar getInstance();
方法名 | 说明 |
---|---|
public final Date getTime() | 获取日期对象 |
public final setTime() | 给日历设置日期对象 |
public long getTimeInMillis() | 拿到时间毫秒值 |
public void setTimeInMillis(long millis) | 给日历设置时间毫秒值 |
public int get(int field) | 取日历中的某个字段信息 |
public void set(int field,int value) | 修改日历中的某个字段信息 |
public void add(int field,int amount) | 为某个字段增加/减少指定的值 |
- Calendar 是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象
- 会把时间年月日时分秒星期放到一个数组中
- 月份:范围0-11 如果获取出来的0 实际上是1月,所以需要+1
- 星期:范围1-7 星期日是 1
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
// 获取日历对象
Calendar cl = Calendar.getInstance();
// cl 会把时间年月日时分秒星期放到一个数组中
System.out.println(cl);
// java.util.GregorianCalendar[time=1741486459073,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2025,MONTH=2,WEEK_OF_YEAR=10,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=68,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=14,SECOND=19,MILLISECOND=73,ZONE_OFFSET=28800000,DST_OFFSET=0]
}
}
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
// 获取日历对象
// Calendar 是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象
Calendar cl = Calendar.getInstance();
// year 年 month 月 day 日
// Hour 时 minute 分 second 秒 millisecond 毫秒 nanosecond 纳秒
// week 星期
cl.set(Calendar.YEAR, 2021); // 修改年 2021年
cl.set(Calendar.MONTH, 1); // 修改月2月
cl.set(Calendar.DAY_OF_MONTH, 28); // 修改为31日,如果没有或叠加至3月
cl.add(Calendar.YEAR, 1); // 增加1年
cl.add(Calendar.MONTH, 1); // 增加1个月
int year = cl.get(Calendar.YEAR); // 年
int month = cl.get(Calendar.MONTH) + 1;// 月
int day = cl.get(Calendar.DAY_OF_MONTH); //日
int hour = cl.get(Calendar.HOUR_OF_DAY); //时
int minute = cl.get(Calendar.MINUTE); //分
int second = cl.get(Calendar.SECOND);// 秒
int millisecond = cl.get(Calendar.MILLISECOND);// 毫秒
int week = cl.get(Calendar.DAY_OF_WEEK) - 1;//星期
System.out.println(year + "-" + month + "-" + day + "-" + hour + "-" + minute + "-" + second + "-" + millisecond + getWeek(week));
}
// 星期是从1-7 1是周日
public static String getWeek(int week) {
String[] arr = {"", "星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
return arr[week];
}
}
Date类
ZoneId
时区
import java.time.ZoneId;
import java.util.Set;
public class ZoneIdDemo {
public static void main(String[] args) {
// 获取java中支持的所有时区
Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
for (String zoneIdStr : availableZoneIds) {
System.out.println(zoneIdStr);
}
// 获取系统默认时区
ZoneId zoneId1 = ZoneId.systemDefault(); // Asia/Shanghai
System.out.println(zoneId1);
// 获取一个指定的时区
ZoneId zoneId2 = ZoneId.of("Asia/Shanghai");
System.out.println(zoneId2);
}
}
Instant
时间戳
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class InstantDemo {
public static void main(String[] args) {
// 获取标准时间
Instant instant = Instant.now();
// System.out.println(instant);
//
// 根据秒/毫秒/纳秒获取Instant对象
Instant instant1 = Instant.ofEpochMilli(0L); // 毫秒值 1970-01-01T00:00:00Z
Instant instant2 = Instant.ofEpochSecond(1L); // 秒 1970-01-01T00:00:01Z
//
Instant instant3 = Instant.ofEpochSecond(1L, 1000000000); // 1970-01-01T00:00:02Z
System.out.println(instant1);
System.out.println(instant2);
System.out.println(instant3);
// 指定时区 获取时间
ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(time); // 2025-03-09T18:36:40.110903500+08:00[Asia/Shanghai]
// 用于时间的判断
// isBefore:判断调用者代表的时间是否在参数表示时间的前面
Instant instant4 = Instant.ofEpochMilli(0L);
Instant instant5 = Instant.ofEpochMilli(1000L);
boolean before = instant4.isBefore(instant5); // true
System.out.println(before);
// isAfter : 判断调用者代表的时间是否在参数表示的后面
boolean before1 = instant4.isAfter(instant5);
System.out.println(before1);
// 减少时间系列的方法 minusXXX
Instant instant6 = Instant.ofEpochMilli(3000L);
System.out.println(instant6); // 1970-01-01T00:00:03Z
// minusXXX
Instant instant7 = instant6.minusSeconds(1); // 减少毫秒,其他同理
System.out.println(instant7); // 1970-01-01T00:00:02Z
// 增加时间系列的方法 plusXXX
Instant instant8 = Instant.ofEpochMilli(3000L);
System.out.println(instant6); // 1970-01-01T00:00:03Z
// plusXXX
Instant instant9 = instant6.plusSeconds(1); // 增加毫秒,其他同理
System.out.println(instant7); // 1970-01-01T00:00:02Z
}
}
ZoneDateTime
带时区的时间
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class ZoneDateTimeDemo {
public static void main(String[] args) {
// 带当前时间对象(带时区)
ZonedDateTime now = ZonedDateTime.now();
System.out.println(now); // 2025-03-09T23:00:46.842758100+08:00[Asia/Shanghai]
// 获取指定的时间对象(带时区)
ZonedDateTime time = ZonedDateTime.of(2021, 5, 18, 8, 0, 0, 0, ZoneId.of("Asia/Shanghai"));
System.out.println(time); // 2021-05-18T08:00+08:00[Asia/Shanghai]
// 通过Instant + 时区的方式获取指定获取时间对象
Instant instant = Instant.ofEpochMilli(3000L);
ZoneId zone = ZoneId.of("Asia/Shanghai");
ZonedDateTime time1 = ZonedDateTime.ofInstant(instant, zone); // 时区
System.out.println(time1); // 1970-01-01T08:00:03+08:00[Asia/Shanghai]
// 修改时间系列的方法
ZonedDateTime zonedDateTime = time.withYear(2025);
System.out.println(zonedDateTime); // 2025-05-18T08:00+08:00[Asia/Shanghai]
// 减少时间
ZonedDateTime zonedDateTime1 = zonedDateTime.minusYears(4);
System.out.println(zonedDateTime1); // 2021-05-18T08:00+08:00[Asia/Shanghai]
// 增加时间
ZonedDateTime zonedDateTime2 = zonedDateTime1.plusYears(4);
System.out.println(zonedDateTime2); // 2025-05-18T08:00+08:00[Asia/Shanghai]
}
}
日期格式化类
DateTimeFormatter
用于时间的格式化和解析
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterDemo {
public static void main(String[] args) {
// 定义时间
ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
// 解析/格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");
// 格式化
System.out.println(formatter.format(time)); // 2025-03-09 23:16:02 周日 下午
}
}
日历类
LocalDate
年、月、日
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
public class LocalDateDemo {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println(date); // 2025-03-09
// 获取年
int getYear = date.getYear(); // 2025
System.out.println(getYear);
// 获取月
Month getMonth = date.getMonth(); // 3
System.out.println(getMonth);
// 获取日
int getDay = date.getDayOfMonth();
System.out.println(getDay); // 9
// 获取星期
DayOfWeek dayOfWeek = date.getDayOfWeek(); // SUNDAY
System.out.println(dayOfWeek);
LocalDate date1 = LocalDate.of(2021, 5, 18);
System.out.println(date1); // 2021-05-18
// 修改 withXXX
LocalDate localDate = date1.withYear(2025);
System.out.println(localDate); // 2025-05-18
// 增加 plusXXX
LocalDate localDate1 = localDate.plusDays(1);
System.out.println(localDate1); // 2025-05-19
// 减少 minusXXX
LocalDate localDate2 = localDate1.minusDays(1);
System.out.println(localDate2); // 2025-05-18
}
}
LocalTime
时、分、秒
LocalDateTime
年、月、日、时、分、秒
工具类
Duration
时间间隔(秒,纳秒)
Period
时间间隔(年、月、日)
ChronoUnit
时间间隔(所有单位)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(1)
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。