欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中Date类和Calendar类的常用实例小结

程序员文章站 2024-03-05 13:25:00
前言 写后台程序的时候,经常需要存储当前服务器的时间戳,使用时间戳也很方便,客户端和服务器端都可以根据自己的需求做各自的转换 在php里,获取当前时间戳使用time()...

前言
写后台程序的时候,经常需要存储当前服务器的时间戳,使用时间戳也很方便,客户端和服务器端都可以根据自己的需求做各自的转换

在php里,获取当前时间戳使用time()函数,格式化输出通过date()函数即可,java里相对复杂一些,这里简单介绍一下

java语言中的calendar,date,dateformat组成了java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分,所有的开发者都应该能计算未来的日期,定制日期的显示格式,并将文本数据解析成日期对象


获取unix时间戳
在jdk1.0中,date类是唯一的一个代表时间的类,但是由于date类不便于实现国际化,所以从jdk1.1版本开始,推荐使用calendar类进行时间和日期的处理。这里简单介绍一下用date类如何获取当前时间戳

使用系统的当前日期和时间创建一个日期对象并返回一个长整数,这个时间通常称为java 虚拟机(jvm)主机环境的系统时间,单位是毫秒,因此需要除以1000转换成unix时间戳

  

 import java.util.date; 
   
  public class timetest { 
    public static void main(string args[]) { 
      date time = new date(); 
      system.out.println(time.gettime() / 1000); // 1387258105 
      system.out.println(time.tostring()); // tue dec 17 13:28:25 cst 2013 
    } 
  } 

格式化日期
php里可以使用date()函数定制日期数据的格式用于呈现,java里需要调用simpledateformat类,例如将当前时间格式化输出:

 

  import java.text.simpledateformat; 
  import java.util.date; 
   
   
  public class timetest { 
    public static void main(string args[]) { 
      date time = new date(); 
      system.out.println(time.gettime() / 1000); // 1387260201 
   
      simpledateformat sdf = new simpledateformat("yyyy-mm-dd hh:mm:ss"); // 2013-03-17 14:03:21 
      string str = sdf.format(time); 
      system.out.println(str); 
    } 
  } 

将文本解析成日期对象
给定了格式化的时间字符串,例如“2013-12-17 14:05:59”,需要将其转换成date对象,便于获取时间戳获取进行其它格式化操作,可以继续调用simpledateformat类

  

 import java.text.parseexception; 
  import java.text.simpledateformat; 
  import java.util.date; 
   
   
  public class timetest { 
    public static void main(string args[]) { 
      string text = "2013-12-17 14:05:59"; 
      simpledateformat sdf = new simpledateformat("yyyy-mm-dd hh:mm:ss"); 
       
      try { 
        date time = sdf.parse(text); 
        system.out.println(time.gettime() / 1000); 
      } catch(parseexception e) { 
        system.out.println(e.getmessage()); 
      } 
    } 
  } 

获取日期的特定部分
通过date和simpledateformat两个类,我们已经可以实现获取当前时间戳,日期格式化输出,格式化日期字符串转date对象功能,现在还有一个新的需求,如何获取日期的特定部分,例如当前的小时,当前的天数等,这就需要用到calendar类了

  import java.util.calendar; 
  import java.util.date; 
  import java.util.gregoriancalendar; 
   
   
  public class timetest { 
    public static void main(string args[]) { 
      date date = new date(); 
      gregoriancalendar gcalendar = new gregoriancalendar(); 
      gcalendar.settime(date); 
   
      int year = gcalendar.get(calendar.year); 
      int month = gcalendar.get(calendar.month); 
      int day = gcalendar.get(calendar.day_of_month); 
   
      int hour = gcalendar.get(calendar.hour_of_day); 
      int minute = gcalendar.get(calendar.minute); 
      int second = gcalendar.get(calendar.minute); 
   
      system.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" 
          + second); 
    } 
  } 


计算两个日期之间相差的天数

例如计算2010年4月1号和2009年3月11号之间相差的天数,则可以使用时间和日期处理进行计算。
该程序实现的原理为:首先代表两个特定的时间点,这里使用calendar的对象进行代表,然后将两个时间点转换为对应的相对时间,求两个时间点相对时间的差值,然后除以1天的毫秒数(24小时x60分钟x60秒x1000毫秒)即可获得对应的天数。实现该示例的完整代码如下:

import java.util.*;
/**
* 计算两个日期之间相差的天数
*/
public class dateexample1 {
public static void main(string[] args) {
//设置两个日期
//日期:2009年3月11号
calendar c1 = calendar.getinstance();
c1.set(2009, 3 - 1, 11);
//日期:2010年4月1号
calendar c2 = calendar.getinstance();
c2.set(2010, 4 - 1, 1);
//转换为相对时间
long t1 = c1.gettimeinmillis();
long t2 = c2.gettimeinmillis();
//计算天数
long days = (t2 - t1)/(24 * 60 * 60 * 1000);
system.out.println(days);
}
}


输出当前月的月历

该示例的功能是输出当前系统时间所在月的日历,例如当前系统时间是2009年3月10日,则输出2009年3月的日历。
该程序实现的原理为:首先获得该月1号是星期几,然后获得该月的天数,最后使用流程控制实现按照日历的格式进行输出即可。即如果1号是星期一,则打印一个单位的空格,如果1号是星期二,则打印两个单位的空格,依次类推。打印完星期六的日期以后,进行换行。实现该示例的完整代码如下:

import java.util.*;
/**
* 输出当前月的日历
*/
public class dateexample2{
public static void main(string[] args){
//获得当前时间
calendar c = calendar.getinstance();
//设置代表的日期为1号
c.set(calendar.date,1);
//获得1号是星期几
int start = c.get(calendar.day_of_week);
//获得当前月的最大日期数
int maxday = c.getactualmaximum(calendar.date);
//输出标题
system.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
//输出开始的空格
for(int i = 1;i < start;i++){
system.out.print(" ");
}
//输出该月中的所有日期
for(int i = 1;i <= maxday;i++){
//输出日期数字
system.out.print(" " + i);
//输出分隔空格
system.out.print(" ");
if(i < 10){
system.out.print(' ');
}
//判断是否换行
if((start + i - 1) % 7 == 0){
system.out.println();
}
}
//换行
system.out.println();
}
}