网站首页 > java教程 正文
假设我们有YearMonth.now(),我们想将其转换为一个整数(例如,这可能对使用数据库中的数字字段存储年/月日期很有用)。解决方案如下:
public static int to(YearMonth u) {
return (int) u.getLong(ChronoField.PROLEPTIC_MONTH);
}
proleptic-month是一个java.time.temporal.TemporalField,它基本上代表一个日期时间字段,如一年中的月份(我们的情况)或一小时中的分钟。proleptic-month从0开始,从公元0年顺序计算月份。因此,getLong()返回此year-month中指定字段(此处为proleptic-month)的值,作为一个long。我们可以将这个long转换为int,因为proleptic-month不会超出int的范围(例如,对于2023/2,返回的int是24277)。
反之,可以按如下方式完成:
public static YearMonth from(int t) {
return YearMonth.of(1970, 1)
.with(ChronoField.PROLEPTIC_MONTH, t);
}
你可以从任何年/月开始。1970/1(被称为纪元,是java.time.Instant的起始点)的选择只是任意选择。
66. 将周/年转换为Date
让我们考虑2023年,第10周。相应的日期是2023年3月5日星期日15:15:08 EET(当然,时间部分是相对的)。通过Calendar API,可以将年/周转换为java.util.Date,如下所示的自解释代码片段:
public static Date from(int year, int week) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.WEEK_OF_YEAR, week);
calendar.set(Calendar.DAY_OF_WEEK, 1);
return calendar.getTime();
}
如果你更喜欢获得一个LocalDate而不是Date,那么你可以很容易地执行相应的转换,或者你可以依赖于java.time.temporal.WeekFields。这个API公开了几个字段,用于处理一年中的周数、一个月中的周数和一周中的天数。也就是说,这是通过WeekFields返回LocalDate的先前解决方案:
public static LocalDate from(int year, int week) {
WeekFields weekFields = WeekFields.of(Locale.getDefault());
return LocalDate.now()
.withYear(year)
.with(weekFields.weekOfYear(), week)
.with(weekFields.dayOfWeek(), 1);
}
另一方面,如果我们有一个java.util.Date,我们想从中提取年份和周数,那么我们可以使用Calendar API非常直接。这里,我们提取年份:
public static int getYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
在这里,我们提取周数:
public static int getWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.WEEK_OF_YEAR);
}
多亏了ChronoField.YEAR和ChronoField.ALIGNED_WEEK_OF_YEAR,从LocalDate中获取年份和周数很容易:
public static int getYear(LocalDate date) {
return date.get(ChronoField.YEAR);
}
public static int getWeek(LocalDate date) {
return date.get(ChronoField.ALIGNED_WEEK_OF_YEAR);
}
当然,通过WeekFields也可以获得周数:
return date.get(WeekFields.of(
Locale.getDefault()).weekOfYear());
挑战自己,尝试从Date/LocalDate中获取周/月和日/周。
猜你喜欢
- 2024-10-12 Java好用的时间类,别再用Date了(java时间工具包)
- 2024-10-12 一文详解Java LocalDateTime(一文详解国资委79号文)
- 2024-10-12 Java时间类从此变得清晰明了(java时间属性)
- 2024-10-12 Java 面试题之 Logback 打印日志是如何获取当前方法名称的?
- 2024-10-12 JAVA8时间操作总结(java8时间处理)
- 2024-10-12 用java中的时间类实现一个日历(java中如何实现日期类)
- 2024-10-12 python获取时间戳(10位和13位)(py获取当前时间戳)
- 2024-10-12 Java修炼终极指南:68. 计算给定日期的季度
- 2024-10-12 让大学生写的一个计算时间的方法,有人看得出来是在做什么吗?这
- 2024-10-12 6种快速统计代码执行时间的方法,真香
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)