• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
风吹花落泪如雨
博客园    首页    新随笔    联系   管理    订阅  订阅

JAVA基础类库(二)-----日期、时间类和格式器

Date类

public class DateTest{
   public static void main(String[] args){
      Date d1 = new Date();
      //获取当前时间之后100ms的时间
      Date d2 = new Date(System.currentTimeMillis() + 10000);
      System.out.println(d1); 
      System.out.println(d2);
      //比较d1,d2是否相等,相等返回0,大于返回1,小于返回-1.
      System.out.println(d1.compareTo(d2));   
      //判断d1在d2之前/之后
      System.out.println(d1.before(d2)); 
      System.out.println(d1.after(d2));  
   }
}

Calendar类

//创建一个默认的Calendar对象
Calendar calenadar = Calendar.getInstance();
//从Calendar对象中取出Date对象
Date date = calendar.getTime();
//通过Date对象获得对应的Calendar对象
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date);

 

Calendar访问、修改日期时间的方法:

import java.util.Calendar;
//静态导入Calendar类里所有类变量,可以直接使用YEAR、MONTH等
import static java.util.Calendar.*;
public class a{
   public static void main(String[] args){
     Calendar c= Calendar.getInstance();
     //取出年、月、日
     System.out.println(c.get(YEAR)+" "+c.get(MONTH)+" "+c.get(DATE));
     //设置年、月、日、小时、分钟、秒
     c.set(2003,10,23,12,32,23);
     //将Calendar的年往前推2年
     c.add(YEAR,-2);
     //与add类似,但不会向上一个字段进位
     c.roll(MONTH,3);
   }
}

1.设置Calendar的容错性

Calendar cal = Calendar.getInstance();
//YEAR+1,MONTH+1
cal.set(MONTH,13);
//关闭容错性
cal.setLenient(false);
//程序运行异常
cal.set(MONTH,13);

2.set()方法延迟修改

尽管set(f,value)方法的日历字段f是立即修改的,但Calendar的时间不会立即修改,知道下次调用get(),getTime(),getTimeMillis(),add()或roll()时才会修改日历的时间。

Calendar cal = Calendar.getInstance();
cal.set(2003,7,31);
//将月份设为9,但9月31日不存在。
cal.set(MONTH,8);

//如果立即修改,cal会设为10月1日
System.out.println(cal.getTime()); 
//再设置DATE字段,输出2003-10-5
cal.set(DATE,5); 
System.out.println(cal.getTime());

//如果不立即修改,cal仅将MONTH修改为9月
//System.out.println(cal.getTime()); 
//再设置DATE字段,输出2003-9-5
cal.set(DATE,5); 
System.out.println(cal.getTime());

 

DateFormat格式化日期、时间

getDateInstance():返回一个日期格式器,只有日期,没有时间

getTimeInstance():返回一个时间格式器,只有时间,没有日期

getDateTimeInstance():返回一个时间格式器,既有时间,也有日期

日期样式、时间样式,DateFormat的四个静态常量:FULL、LONG、MEDIUM、SHORT

import java.text.DateFormat;
//静态导入DateFormat类里所有类变量,可以直接使用FULL、LONG、MEDIUM、SHORT等
import static java.text.DateFormat.*;
import java.util.Locale;
import java.util.Date;
public class a{
   public static void main(String[] args){
     Date dt = new Date();
     Locale locale = Locale.CHINA;
     DateFormat df1 = DateFormat.getDateInstance(FULL,locale);
     DateFormat df2 = DateFormat.getTimeInstance(FULL,locale);
     System.out.println(df1.format(dt));
     System.out.println(df2.format(dt));
   }
}

 

DateFormat的parse()方法可以把一个字符串解析成Date对象,但要求被解析的字符串必须符合日期字符串的要求。缺点:不够灵活,为了更好地格式化日期、解析日期字符串,Java提供了SimpleDateFormat类

 

SimpleDateFormat格式化日期

import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;

public class a{
   public static void main(String[] args)
    throws ParseException{
     Date d = new Date();
     SimpleDateFormat sdf1 = new SimpleDateFormat("Gyyyy年中第D天");
     //公元2018年中第160天
     String dateStr = sdf1.format(d);
     String str = "14###3月##21";
     SimpleDateFormat sdf2 = new SimpleDateFormat("yy###M月##dd");
     System.out.println(sdf2.parse(str));
   }
}

 

Java8新增的DateTimeFormatter格式器类

 

DateTimeFormatter相当于DateFormat和SimpleDateFormat的合体类,功能非常强大

1.使用DateTimeFormatter完成格式化

import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.LocalDateTime;
public class a{
   public static void main(String[] args){
     DateTimeFormatter[] formatters = new DateTimeFormatter[]{
       //直接使用常量创建DateTimeFormatter格式器
       DateTimeFormatter.ISO_LOCAL_DATE,
       DateTimeFormatter.ISO_LOCAL_TIME,
       DateTimeFormatter.ISO_LOCAL_DATE_TIME,
       //使用本地化的不同风格来创建DateTimeFormatter格式器
       DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL,FormatStyle.MEDIUM),
       DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG),
       //根据模式字符串来创建DateTimeFormatter格式器
       DateTimeFormatter.ofPattern("Gyyyy%%MMM%dd HH:mm:ss")
     };
     LocalDateTime date = LocalDateTime.now();
     for(int i = 0 ; i < formatters.length ; i++){
       //下面两行代码作用相同
       //System.out.println(date.format(formatters[i]));
       System.out.println(formatters[i].format(date));
     }
   }
}

 

2.使用DateTimeFormatter解析字符串

import java.time.format.DateTimeFormatter;
import java.time.LocalDateTime;
public class a{
   public static void main(String[] args){
     String str1 = "2011@@02@@04 01时02分03秒";
     DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy@@MM@@dd HH时mm分ss秒");
     LocalDateTime dt1 = LocalDateTime.parse(str1,formatter1);
     System.out.println(dt1);
   }
}

 

 

 

 

 

 

 

 

posted @ 2018-06-08 22:11  风吹花落泪如雨  阅读(126)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3