1.java.sql.Timestamp
我们从数据库中取到的具体时间一般是java.sql.Timestamp类型的。java.sql.Timestamp是java.util.Date的子类。java.sql.Timestamp包含日期和时间,而java.sql.Date只包含日期。
它通过允许小数秒到纳秒级精度的规范来添加保存 SQL TIMESTAMP
小数秒值的能力。
计算 Timestamp 对象的精度为二者之一:
-
19
,其为 yyyy-mm-dd hh:mm:ss 格式下的字符数 -
20 + s
,其为 yyyy-mm-dd hh:mm:ss.[fff...] 格式下的字符数,s
表示给定 Timestamp 的标度(其小数秒精度)。
此类型由 java.util.Date
和单独的毫微秒值组成。只有整数秒才会存储在 java.util.Date
组件中。小数秒(毫微秒)是独立存在的。传递不是 java.sql.Timestamp
实例的对象时,Timestamp.equals(Object)
方法永远不会返回 true
,因为日期的毫微秒组件是未知的。因此,相对于 java.util.Date.equals(Object)
方法而言,Timestamp.equals(Object)
方法是不对称的。此外,hashcode
方法使用底层 java.util.Date
实现并因此在其计算中不包括毫微秒。
鉴于 Timestamp
类和上述 java.util.Date
类之间的不同,建议代码一般不要将 Timestamp
值视为 java.util.Date
的实例。Timestamp
和 java.util.Date
之间的继承关系实际上指的是实现继承,而不是类型继承。
toString和valueOf方法使用 JDBC 时间戳转义格式编排时间戳。yyyy-mm-dd hh:mm:ss.fffffffff
,其中 ffffffffff
指示毫微秒。
2.java.sql.Time
此类类似于java.sql.Date,表示时间。
常用的方法:
使用毫秒时间值构造 |
|
使用 JDBC 时间转义格式对时间进行格式化。 |
|
将使用 JDBC 时间转义格式的字符串转换为 |
返回的时间字符格式是:hh:mm:ss
3.java.sql.Calendar
Calendar类用的不是特别多,它是一个抽象类,我们常常使用getInstance()去获取它的对象,或使用它的子类java.util.GregorianCalendar。它可以取出日期中的某一部分(比如年,月,日,时,分,秒等等)。下面是Calendar的操作用法。
Calendar中使用get()方法取出想要的部分;
以下是Calendar中常用的常量
对于日期字段:
YEAR + MONTH + DAY_OF_MONTH YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK YEAR + DAY_OF_YEAR YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
对于时间字段:
HOUR_OF_DAY AM_PM + HOUR
1 package MyTest;
2
3 /*
4 * 演示 Calendar 的一般操作
5 */
6 import java.util.Date;
7 import java.text.SimpleDateFormat;
8 import java.text.DateFormat;
9 import java.util.Calendar;
10
11 public class Test
12 {
13 public Test()
14 {
15 }
16
17 public static void main(String[] args)
18 {
19 // 字符串转换日期格式
20 DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
21 // 得到日期格式对象
22 Date date = fmtDateTime.parse(strDateMake);
23
24 // 完整显示日期时间
25 String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date());
26 System.out.println(str);
27
28 // 创建 Calendar 对象
29 Calendar calendar = Calendar.getInstance();
30 // 初始化 Calendar 对象,但并不必要,除非需要重置时间
31 calendar.setTime(new Date());
32
33 // setTime 类似上面一行
34 // Date date = new Date();
35 // calendar.setTime(date);
36
37 // 显示年份
38 int year = calendar.get(Calendar.YEAR);
39 System.out.println("YEAR is = " + String.valueOf(year));
40
41 // 显示月份 (从0开始, 实际显示要加一)
42 int MONTH = calendar.get(Calendar.MONTH);
43 System.out.println("MONTH is = " + (MONTH + 1));
44
45 // 今年的第 N 天
46 int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);
47 System.out.println("DAY_OF_YEAR is = " + DAY_OF_YEAR);
48
49 // 本月第 N 天
50 int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);
51 System.out.println("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH));
52
53 // 3小时以后
54 calendar.add(Calendar.HOUR_OF_DAY, 3);
55 int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);
56 System.out.println("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY);
57
58 // 当前分钟数
59 int MINUTE = calendar.get(Calendar.MINUTE);
60 System.out.println("MINUTE = " + MINUTE);
61
62 // 15 分钟以后
63 calendar.add(Calendar.MINUTE, 15);
64 MINUTE = calendar.get(Calendar.MINUTE);
65 System.out.println("MINUTE + 15 = " + MINUTE);
66
67 // 30分钟前
68 calendar.add(Calendar.MINUTE, -30);
69 MINUTE = calendar.get(Calendar.MINUTE);
70 System.out.println("MINUTE - 30 = " + MINUTE);
71
72 // 格式化显示
73 str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
74 System.out.println(str);
75
76 // 重置 Calendar 显示当前时间
77 calendar.setTime(new Date());
78 str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
79 System.out.println(str);
80
81 // 创建一个 Calendar 用于比较时间
82 Calendar calendarNew = Calendar.getInstance();
83
84 // 设定为 5 小时以前,后者大,显示 -1
85 calendarNew.add(Calendar.HOUR, -5);
86 System.out.println("时间比较:" + calendarNew.compareTo(calendar));
87
88 // 设定7小时以后,前者大,显示 1
89 calendarNew.add(Calendar.HOUR, +7);
90 System.out.println("时间比较:" + calendarNew.compareTo(calendar));
91
92 // 退回 2 小时,时间相同,显示 0
93 calendarNew.add(Calendar.HOUR, -2);
94 System.out.println("时间比较:" + calendarNew.compareTo(calendar));
95 }
96 }
4.世界时
科普下,以下几个概念可视为相同:
格林威治标准时 (GMT)==世界时 (UT)==世界时 (UTC)
一般我们获得的时间,是计算机从系统中获取默认的时区得到的时间,那么我们怎么查看其它时区的当前时间呢?
在java中,java.util.TimeZone是一个时区类,使用TimeZone.getTimeZone(String ID)可以获得对应ID的时区。
例子:
1 import java.util.Calendar;
2 import java.util.GregorianCalendar;
3 import java.util.TimeZone;
4
5
6 public class TestUT {
7
8 public static void main(String[] args) {
9 Calendar c=new GregorianCalendar(TimeZone.getTimeZone("Japan"));
10 System.out.println(c.get(Calendar.HOUR_OF_DAY));
11
12 }
13
14 }
那么我们怎么知道有哪些ID呢?通过TimeZone.getAvailableIDs(),可以得到能使用的ID
1 import java.util.TimeZone;
2
3 public class TestUT {
4
5 public static void main(String[] args) {
6 for(String s:TimeZone.getAvailableIDs()){
7 System.out.println(s);
8 }
9 }
10
11 }
5.获取当前时间
- System.currentTimeMillis(); 常用于测试代码效率,计算运行时间。
- new Date(); 将当前时间转为Date对象。
- Calendar.getInstance();