免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2003 | 回复: 0
打印 上一主题 下一主题

Java中的日期/时间类,Date、DateFormat、Calendar类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-01 14:46 |只看该作者 |倒序浏览
具体类(和抽象类相对)java.util.Date
抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat
抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar
具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类。


Date类:
Date类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1月1日00:00:00这一刻之前或者是之后经历的毫秒数。
Date类常用的两个构造函数:
  Date()无参数的构造函数创建的对象可以获取本地当前时间。
  Date(long time)使用一个从GMT(格林尼治标准时间)1970年, 1月1日00:00:00这一刻之前或者是之后经历的毫秒数创建一个Date对象
Date示例:
  Date date = new Date();
  System.out.println(date.getTime());  //1228061164796
  System.out.println(date.toString());  //Mon Dec 01 00:06:04 CST 2008


日期数据的定制格式:(DateFormat类、SimpleDateFormat类)
为了定制日期数据的输出格式,我们可以使用DateFormat的子类SimpleDateFormat。SimpleDateFormat有个常用构造方法:
  public SimpleDateFormat(String pattern)  //pattern指定输出格式
pattern中可以有如下格式符:
  y,yy:用2位数字表示的"年"替换。
  yyyy:用4位数字表示的"年"替换。
  M,MM:用2位数字表示的"月"替换。
  MMM:用汉字表示的"月"替换。
  d,dd:用2位数字表示的"日"替换。
  H,HH:用2位数字表示的"时"替换。
  m,mm:用2位数字表示的"分"替换。
  s,ss:用2位数字表示的"秒"替换。
  E:用"星期"替换
pattern中的普通ASCII字符,必须用单引号“'”字符括起来,如:
  pattern="'time':yyyy-MM-dd";
用SimpleDateFormat对象调用如下方法可以定制某时间输出格式:
  public String format(Date date)
实例:
  SimpleDateFormat sdf = new SimpleDateFormat(" 'time':yyyy-MM-dd");
  System.out.println(sdf.format(date));  // time:2008-12-01

假如我们由一个文本字符串包含一个格式化了的日期对象,现在从这个字符串中解析日期数据创建一个日期对象。
使用SimpleDateFormat对象调用如下函数创建一个Date对象:
  Date java.text.DateFormat.parse(String source)
实例:
  String str="2008-12-1";
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  try{
   Date date=sdf.parse(str);
   System.out.println(date);  //Mon Dec 01 00:00:00 CST 2008
  }
  catch(Exception ex){
   System.out.println(ex.getMessage());
  }

使用标准的日期格式化过程:
  常用的两个获取日期/时间格式器的方法:
  public static final DateFormat getDateTimeInstance() //具有默认语言环境的默认格式化风格。
  public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle) //具有默认语言环境的给定日期和时间格式化风格。
实例:
  Date date = new Date();
  DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
  DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
  DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
  DateFormat fullDateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
  System.out.println(shortDateFormat.format(date));  //08-12-1 下午1:28
  System.out.println(mediumDateFormat.format(date));  //2008-12-1 13:28:31
  System.out.println(longDateFormat.format(date));  //2008年12月1日 下午01时28分31秒
  System.out.println(fullDateFormat.format(date));  //2008年12月1日 星期一 下午01时28分31秒 CST


Calendar类:
使用Date类可以创建日期/时间对象,使用DateFormat类,SimpleDateFormat类可以对Date对象进行格式化。
使用Calendar类可以设置和获取日期/时间数据的特定部分。

Calendar类是抽象类不能实例化对象,但是可以使用Calendar类的static方法getInstance(),可以初始化一个日历对象。如:
  Calendar calendar = Calendar.getInstance();
然后可以使用该calendar对象可以调用方法,如:(当year取负数时表示公元前)
  public final void set(int year, int month, int date)
  public final void set(int year, int month, int date, int hourOfDay, int minute)
  public final void set(int year, int month, int date, int hourOfDay, int minute, int second)
Calendar类对象调用如下方法可以获取有关年份,月份,小时,星期等信息,参数field的有效值由Calendar的静态常量指定
  public int get(int field)
实例:
  calendar.get(Calendar.MONTH);  //返回一个整数,如果该整数是0表示一月,11表示12月
Calendar对象调用如下方法可以把时间表示为毫秒:
  public long getTimeInMillis()

Calendar使用实例:
  Calendar calendar = Calendar.getInstance();
  calendar.setTime(new Date());
  String  年 = String.valueOf(calendar.get(YEAR)),
    月 = String.valueOf(calendar.get(MONTH)+1),
    日 = String.valueOf(calendar.get(DAY_OF_MONTH)),
    星期 = String.valueOf(calendar.get(DAY_OF_WEEK)-1);
  
  int hour = calendar.get(HOUR_OF_DAY),
   minute = calendar.get(MINUTE),
   second = calendar.get(SECOND);
  
  System.out.println("现在的时间是:");
  System.out.println(年+"年"+月+"月"+日+"日"+"星期"+星期);
  System.out.println(hour+"时"+minute+"分"+second+"秒");
  
  calendar.set(2004,7,8);  //将日历翻到2004年8月8日,注意7表示八月
  long time2004 = calendar.getTimeInMillis();
  calendar.set(2008,7,8);  //将日历翻到2008年8月8日
  long time2008 = calendar.getTimeInMillis();
  long 相隔天数 = (time2008-time2004)/(1000*60*60*24);
  System.out.println("2008年8月8日和2004年8月8日相隔"+相隔天数+"天");
输出结果:
  现在的时间是:
  2008年12月1日星期1
  14时41分45秒
  2008年8月8日和2004年8月8日相隔1461天

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84086/showart_1674307.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP