首页 > 代码库 > 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
的实例。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 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日期处理总结(二)