ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java的日期类都是怎么用的 [打印本页]

作者: 尚未崩坏    时间: 2024-9-30 14:03
标题: Java的日期类都是怎么用的
Java中的Date

为什么用类表示日期,而不是像其他语言中那样用一个内置(built-in)类型来表示?比方,Visual Basic 中有一个内置的 date 类型,程序员可以采用#12/31/1999格式指定日期。看起来这似乎很方便,程序员只需要利用内置的 date 类型而不消考虑类。但实际上,VisualBasic 这样计划合适吗?在有些地区,日期表示为月日/年,而另外一些地区则表示为日1月/年。语言计划者是否能够预见这些问题呢?假如没有处理好这类问题,语言就有大概陷入混乱,对此感到不满的程序员也会丧失利用这种语言的热情。假如利用类,这些计划使命就交给了类库的计划者。假如类计划得不完善,那么其他程序员可以很容易地编写自己的类,改进或替代(replace)这些体系类(作为印证:Java的日期类库开始时有些混乱,如今已经重新计划了两次)。
System.out.println(new Date());这个表达式会构造一个新对象啊你个,这个对象初始化为当前的日期和时间。

或者可以对刚构造的对象应用一个方法。Date类中有一个toString的方法。这个方法将生成日期的一个字符串描述。

在这两个例子中,构造的对象只利用了一次。通常,大概盼望保存所构造的征象从而能继续利用,为此我们把对象存放在一个变量里Date rightnow = new Date(),rightnow引用了新构造的对象

对象和对象变量之间存在着一个重要的区别
Date startTime界说了一个对象变量startTime,它可以引用Date类型的对象。但是,一定要熟悉到它不是一个对象,而且实际上它没有引用任何对象。所以无法调用startTime.toString()方法。所以必须起首初始化startTime变量,可以写成startTime = rightnow或者startTime = new Date(),这两种写法都引用了同一个对象

要熟悉到重要的一点:对象变量并不实际包罗一个对象,它只是引用一个对象。在Java中,任何对象变量的值都是一个引用,指向存储在另外一个地方的某个对象。new 操纵符的返回值也是一个引用。下面的语句:
Date startTime =new Date();有两个部门。表达式new Date()构造了一个Date类型的对象,它的值是新创建对象的一个引用。再将这个引用存储在 startTime 变量中。
可以显式地将对象变量设置为null,指示这个对象变量现在没有引用任何对象。

Java的对象变量虽然引用了对象,但是C++中没有null作用,而且引用不能赋值。应当把对象变量看作是类似于C++的对象指针,比方:
Date rightNow; // Java
实际上等同于
Date* rightNow; //C++
一旦创建了这种关联,一切就清晰了。固然,只有利用了new调用后Date * 指针才会初始化。就这一点而言,C++与 Java的语法儿乎是一样的。
Date* rightNow= new Date();//C++
假如把一个变量复制到另一个变量,两个变量就指向同一个日期,即它们是同一个对象的指针。Java中的null引用对应于C+中的NULL指针。
所有的Java对象都存储在堆中。当一个对象包罗另一个对象变量时,它只是包罗另一个堆对象的指针。
在C++中,指针十分令人头疼,因为它们很容易出错。稍不小心就会创建一个错误的指针,或者使内存管理出问题。在Java语言中,这些问题都不复存在。假如利用一个没有初始化的指针,那么运行时体系将会产生一个行时错误,而不是生成随机的结果。另外,你不必担心内存管理问题,垃圾回收器会处理相关的变乱。
C++确实做了很大的努力,它通过支持复制构造器和赋值送算符来实现对象的主动复制。比方,一个链表(linked list)的副本是一个新链表,其内客与原始链表类似但是有一组独立的链接。这样一来就可以适本地计划类,使它们与内置类型有类似的复制行为。在Java中,必须利用cone方法获得一个对象的完整副本。
LocalDate类

Java的时间是用距离一个固定时间点的毫秒数表示的,这个时间就是所谓
的纪元。它是UTC时间1970年1月1日00:00:00。UTC就是Coordinated Universal Time国际协调时间。
类库计划者决定将保存时间与给时间点命名分开。所以,标准Java类库分别包罗了两个类:一个是用来表示时间点的 Date 类;另一个是用大家熟悉的日历表示法表示日期的 LocalDate类。Java8引人了另外一些类来处理日期和时间的不同方面--有关内容参见卷Ⅱ第6章。
将时间度量与日历分开是一种很好的面向对象计划。通常,最好利用不同的类表示不同的概念。
不要利用构造器来构造LocalDate类的对象。实际上,应当利用静态工厂方法(factorymethod),它会代表你调用构造器。下面的表达式:
LocalDate.now()会构造一个新对象,表示构造这个对象时的日期。
可以提供年、月和日来构造对应一个特定日期的对象:
LocalDate.of(1999,12,31)
固然,通常我们都盼望将构造的对象保存在一个对象变量中:
LocalDate newYearsEve = LocalDate.of(1999, 12,31);
一旦有了一个 LocalDate对象,可以用方法getYear、getMonthValue和getDay0fMonth 得到年月和日:

假如在向未来定一个时刻,比如增长1000天来计算是哪一天,我们可以利用plusday方法

Java库的一个比较早的版本曾经有过另一个处理日历的类,名为GregorianCalendar
  1. GregorianCalendar someday = new GregorianCalendar(2000, 1, 27);
  2. someday.add(Calendar.DAY_OF_MONTH, 1000);
  3. int year = someday.get(Calendar.YEAR);
  4. int month = someday.get(Calendar.MONTH);
  5. int day = someday.get(Calendar.DAY_OF_MONTH);
复制代码

Eg:打印当月日历
  1. import java.time.DayOfWeek;
  2. import java.time.LocalDate;
  3. public class Main {
  4.     public static void main(String[] args) {
  5.         LocalDate date = LocalDate.now(); //首先构造一个对象,并用当前日期初始化
  6.         //获取当前月日
  7.         int month = date.getMonthValue();
  8.         int today = date.getDayOfMonth();
  9.         date = date.minusDays(today - 1);// 讲日期设置为当月第一天
  10.         DayOfWeek weekday = date.getDayOfWeek();//并得到这一天是星期几
  11.         int value = weekday.getValue();// 1=Monday,...,7= Sunday
  12.         System.out.println("Mon Tue Wed Thu Fri Sat Sun");
  13.         for (int i = 1; i < value; i++)
  14.             System.out.print("    ");
  15.         while (date.getMonthValue() == month) {
  16.             System.out.printf("%3d", date.getDayOfMonth());
  17.             if (date.getDayOfMonth() == today) {
  18.                 System.out.print("*");
  19.             } else {
  20.                 System.out.print(" ");
  21.             }
  22.             date = date.plusDays(1);
  23.             if (date.getDayOfWeek().getValue() == 1)
  24.                 System.out.println();
  25.         }
  26.         if (date.getDayOfWeek().getValue() != 1)
  27.             System.out.println();
  28.     }
  29. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4