java中的日期类

Java中包含了以下的日期和时间的处理类或方法

System.currentTimeMillis()

System类的一个静态方法,返回从1970年1月1日到现在的毫秒数。

java.util.Date

一个日期和时间的表示类,不过它里面的好多方法都是不推荐使用的。

java.sql.Date

一个被JDBC使用的日期类,里面好多方法也是不推荐使用的

java.sql.Time

一个被JDBC使用的时间类,里面好多方法也是不推荐使用的

java.sql.Timestamp

一个被JDBC使用的时间戳类

java.util.Calendar

一个基本的日历类,这个类提供了一些方法可以在一个日期上对年月日等做运算来得到另一个日期。

java.util.GregorianCalendar

java.util.Calendar类的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

java.util.TimeZone

一个时区表示类,在跨时区表示日历时比较有用。

java.text.SimpleDateFormat

一个日期转换类,提供日期类型和字符串之间的互相转换。


System.currentTimeMillis()

静态方法System.currentTimeMillis()返回1970-01-01 00:00:00.000到现在的毫秒数,返回值是一个long型


System.nanoTime()

顺便说一下System.nanoTime(),这也是一个静态方法,获得一个以纳秒为单位的值。但是它和日期或时间的表示没有任何关系,不要将它和当前的日期或时间联系起来。在上面我们看到System.currentTimeMillis()返回的是1970-01-01 00:00:00.000到现在的毫秒数,但System.nanoTime()返回的不是1970-01-01 00:00:00.000到现在的纳秒数,这个计时开始时间是不确定的。


Java.util.Date的创建

java.util.Date这个类可能是我们最常用的一个用来表示日期的类了。我们可以像下面这样初始化一个实例来表示当前日期和时间:


Java.sql.Date

java.sql.Date是在JDBC中使用的日期类,在JDBC操作中,如果需要设置一个日期或者从ResultSet获取日期值,就需要使用到java.sql.Date。实际上java.sql.Date继承自java.util.Date,是java.util.Date的一个子类,所以java.util.Date可以调用的方法在java.sql.Date中也可以调用。

  1. long time = System.currentTimeMillis();  
  2. java.sql.Date date = new java.sql.Date(time);  

java.sql.Time

java.sql.Time是JDBC中用来表示时间的类,它也是java.util.Date的子类,可以像下面一样创建一个Time实例:

  1. long timeNow = System.currentTimeMillis();  
  2. java.sql.Time time = new java.sql.Time(timeNow);  

java.sql.Timestamp

java.sql.Timestamp也是继承自java.util.Date,它和java.util.Date一样既能表示日期也能表示时间。java.sql.Timestamp和java.util.Date的一个区别就是java.util.Date只能表示到毫秒级,而java.sql.Timestamp能表示到纳秒级。

java.util.Calendar
  obj.get(Calendar.ABC)
  1. Calendar calendar = new GregorianCalendar();  
  2.   
  3. int year       = calendar.get(Calendar.YEAR);  
  4. int month      = calendar.get(Calendar.MONTH); // 月份从0开始  
  5. int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);   
  6. int dayOfWeek  = calendar.get(Calendar.DAY_OF_WEEK);  
  7. int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);  
  8. int weekOfMonth= calendar.get(Calendar.WEEK_OF_MONTH);  
  9.   
  10. int hour       = calendar.get(Calendar.HOUR);        // 12小时制  
  11. int hourOfDay  = calendar.get(Calendar.HOUR_OF_DAY); // 24小时制  
  12. int minute     = calendar.get(Calendar.MINUTE);  
  13. int second     = calendar.get(Calendar.SECOND);  
  14. int millisecond= calendar.get(Calendar.MILLISECOND);  

  obj.set(Calendar.ABC , number)
   
   
  1. calendar.set(Calendar.YEAR, 2013);  
  2. calendar.set(Calendar.MONTH, 11);  
  3. calendar.set(Calendar.DAY_OF_MONTH, 24);  

需要注意的地方

1、calendar类中使用0到11来表示1到12个自然月,0表示一月份,11表示12月份,比如calendar.get(Calendar.MONTH)的值是5,那么表示6月份。
2、calendar类中使用1到7来表示周日到周六,1表示周日,7表示周六,比如calendar.get(Calendar.DAY_OF_WEEK)的值是3,那么表示周二。


Java.util.TimeZone是一个表示时区的类,如果需要跨时区转换日期,那么可以用java.util.Calendar和java.util.TimeZone联合完成。

可以用下面的方式来获取日历的时区:

时区转换

我们可以通过给日历设置时区,使日历在不同的时区转换,比如下面这个例子:

  1. TimeZone timeZone1 = TimeZone.getTimeZone("America/Los_Angeles");  
  2. TimeZone timeZone2 = TimeZone.getTimeZone("Europe/Copenhagen");  
  3.   
  4. Calendar calendar = new GregorianCalendar();  
  5.   
  6. long timeCPH = calendar.getTimeInMillis();  
  7. System.out.println("timeCPH  = " + timeCPH);  
  8. System.out.println("hour     = " + calendar.get(Calendar.HOUR_OF_DAY));  
  9.   
  10. calendar.setTimeZone(timeZone1);  
  11.   
  12. long timeLA = calendar.getTimeInMillis();  
  13. System.out.println("timeLA   = " + timeLA);  
  14. System.out.println("hour     = " + calendar.get(Calendar.HOUR_OF_DAY));  

输出如下:

  1. timeHere = 1264881305341  
  2. hour     = 20  
  3. timeLA   = 1264881305341  
  4. hour     = 11  

我们发现虽然两个时区的毫秒数是一样的,但是时间表示上却有9个小时的时差。那是因为毫秒数是根据UTC时间(世界标准时间)获取的,
但是时间表示在不同的时区是不同的。



Java.text.SimpleDateFormat类我们一般用来它实现字符串于java.util.Date之间的互转,比如将Date实例转换为指定的字符串表示形式,

或者将一个字符串的日期表示转为具体的Date实例。


日期转换成字符串

使用format()方法可以将一个日期类型的值转换为字符串表示形式,比如:

  1. String pattern = "yyyy-MM-dd";  
  2. SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);  
  3.   
  4. String date = simpleDateFormat.format(new Date());  
  5. System.out.println(date); // 2013-12-04  


常用日期格式
  1. dd-MM-yy                            31-01-12  
  2. dd-MM-yyyy                          31-01-2013  
  3. MM-dd-yyyy                          01-31-2013  
  4. yyyy-MM-dd                          2013-01-31  
  5. yyyy-MM-dd HH:mm:ss                 2013-01-31 23:59:59  
  6. yyyy-MM-dd HH:mm:ss.SSS             2013-01-31 23:59:59.999  
  7. yyyy-MM-dd HH:mm:ss.SSSZ            2013-01-31 23:59:59.999+0100  
  8. EEEEE MMMMM yyyy HH:mm:ss.SSSZ      Saturday November 2013 10:45:42.720+0100  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值