初识Java中的Date和LocalDate

初识Java中的Date和LocalDate

Java库中包含一个Date类。它的对象将描述一个时间点,例如:

image-20240806151451457

可以看到Date类的实例有一个状态,即特定的时间点(如:23:59:59)。虽然我们在使用Date类时不必知道这一点,但时间是用距离一个固定时间点的毫秒数(可正可负)表示的,这个点就是所谓的纪元(epoch),它是UTC时间1970年1月1日00:00:00。UTC是Coordinated Universal Time的缩写,与GMT(即Greenwich Mean Time,格林威治时间)一样,是一种具有实践意义的科学标准时间。

但是,Date类所提供的日期处理并没有太大的用途。Java类库的设计者认为:像“December 31,1999,23:59:59”这样的日期表示法只是阳历的固有习惯。这种特定的描述法遵循了世界上大多数地区使用的Gregorian阳历表示法。但是,同一时间点采用中国的农历表示和采用希伯来的阴历表示时日期就会有所差异了。

因此标准Java类库分别包含了两个类:一个是用来表示时间点的Date类(包含了日期和时间的信息);另一个是用来表示大家熟悉的日历表示法的LocalDate类(只包含了日期信息,没有时间和时区的概念)。

因为将时间与日历分开是一种很好的面向对象设计。通常,最好使用不同的类表示不同的概念。所以jdk1.1之后java.util.Date包含日期相关操作就被标记为@Deprecated不推荐使用了。【仅个人猜测】

最后贴出一个应用LocalDate类demo来看看LocalDate类是如何使用的。这个demo将显示当前月的日历。debug跟一下就能完全明白了。

image-20240806152916768

LocalDate date = LocalDate.now(); // 获取当前日期2024-08-06
int month = date.getMonthValue(); // 获取当前月份 mouth:8
int today = date.getDayOfMonth(); // 获取当前日期的当月第几天 today:6

date = date.minusDays(today - 1); // Set to start of month 2024-08-01
DayOfWeek weekday = date.getDayOfWeek(); // 获取当前日期是星期几 weekday:"THURSDAY"
// 这里遵循国际惯例,即周末是一周的末尾,星期一就返回1,星期二返回2,依此类推。星期日则返回7。
int value = weekday.getValue(); // 1 = Monday, ... 7 = Sunday

System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1; i < value; i++)
    System.out.print("    ");
while (date.getMonthValue() == month)
{
    System.out.printf("%3d", date.getDayOfMonth());
    if (date.getDayOfMonth() == today)
        System.out.print("*");
    else
        System.out.print(" ");
    date = date.plusDays(1);
    if (date.getDayOfWeek().getValue() == 1) System.out.println();
}
if (date.getDayOfWeek().getValue() != 1) System.out.println();

可以看到,利用LocalDate类可以编写一个日历程序,能处理星期几以及各月天数不同等复杂问题。对于使用者来说并不需要知道LocalDate类如何计算月和星期几。只需要使用这个类的接口,如plusDays和getDayOfWeek等方法的作用即可。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值