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,表示时间。

  常用的方法:

 

Time(long time)
          使用毫秒时间值构造 Time 对象。

 

 String toString()
          使用 JDBC 时间转义格式对时间进行格式化。
static Time valueOf(String s)
          将使用 JDBC 时间转义格式的字符串转换为 Time 值。

   返回的时间字符格式是: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

摘自http://blog.csdn.net/joyous/article/details/9630893

 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();