首页 > 代码库 > java日期处理总结(二)

java日期处理总结(二)

技术分享

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 的实例Timestampjava.util.Date 之间的继承关系实际上指的是实现继承,而不是类型继承。

  toString和valueOf方法使用 JDBC 时间戳转义格式编排时间戳。yyyy-mm-dd hh:mm:ss.fffffffff,其中 ffffffffff 指示毫微秒。

2.java.sql.Time

  此类类似于java.sql.Date,表示时间。

  常用的方法:

 

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

 

 StringtoString()
          使用 JDBC 时间转义格式对时间进行格式化。
static TimevalueOf(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 Test12 {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 小时以前,后者大,显示 -185 calendarNew.add(Calendar.HOUR, -5);86 System.out.println("时间比较:" + calendarNew.compareTo(calendar));87 88 // 设定7小时以后,前者大,显示 189 calendarNew.add(Calendar.HOUR, +7);90 System.out.println("时间比较:" + calendarNew.compareTo(calendar));91 92 // 退回 2 小时,时间相同,显示 093 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();

 

java日期处理总结(二)