网站首页 > 精选教程 正文
假设我们有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-11-12 Java时间类介绍:Date的使用 java中datetime数据类型
- 2024-11-12 Java 阴历阳历转换 java转化日期格式
- 2024-11-12 Java 日期类型比较没有返回正确的结果
- 2024-11-12 如何将ABAP时间戳转换为JAVA时间戳,原理是什么呢?
- 2024-11-12 Java8 新特性:新日期与时间 java新时间类
- 2024-11-12 Java中有哪些可以用于日期和时间的API?
- 2024-11-12 Java常用日期操作类 java 日期处理类
- 2024-11-12 日期时间--JAVA成长之路 日期格式 java
- 2024-11-12 java8日期类型属性指定格式序列化配置优先级问题
- 2024-11-12 日期时间API之TemporalAdjusters与TemporalAdjuster
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)