4日期格式化,日期相关类

内容:日期对象Date对象,日期格式对象DateFormat对象,日期格式相互转换,日期与距1970年毫秒值转换,练习
util包中Date类

Date类

java中用于描述日期的类。Date内部维护着一个long值,这个值表示的是1970-01-01
00:00:00到Date所表示的日期之间的毫秒值。

import java.util.Date;
/**
 * java中日期类Date
 */
public class DateTest {
    public static void main(String[] args){
        //创建一个Date实例,,默认的构造方法创建的日期代表当前系统时间
        Date date = new Date();
        /**
         * 输出date对象
         * Tue Feb 27 08:27:54 GMT 2018(jdk1.5)
         * GMT:格林威治时间,世界上计时流行的标志
         * 中国所属的时区为+8区,所有要对时间上的小时+8
         * Tue Feb 27 16:27:54 CST 2018(jdk1.6及以后)
         * CST:中部标准时间,同时代表了下面4个时区:
         * CST Central Standard Time (USA) UT-6:00
         * CST Central Standard Time (Australia) UT 9:30
         * CST China Standard Time UT 8:00
         * CST Cuba Standard Time UT-4:00
         */
        System.out.println(date);
        //查看date内部的毫秒值
        long time = date.getTime();
        System.out.println(time);
        //设置一个一天后的当前时间,让Date表示该日期
        date.setTime(time+1000*60*60*24);
        System.out.println(date);
        /**
         * 获取当前年份
         * 不推荐使用,会有千年虫问题
         * 对于日期的计算,推荐使用Calendar类
         */
        int year=date.getYear();
    }
}

#########################################################################

Calendar类

日历类,Calendar不存在千年虫问题。并且可以非常方便的计算日期。

import java.util.Calendar;
import java.util.Date;
/**
 * 日历类
 */
public class CalendarTest {
    public static void main(String[] args){
        /**
         * 通过Calendar的静态方法获取一个实例
         * 该方法会自行决定时区,帮我们创建Calendar实例
         * 该方法会根据当前系统所在地区来决定时区
         * 这里要注意,实际上根据不同的时区,Calendar有若干个
         * 子类实现。而Calendar本身是抽象类,不能实例化!
         * 我们不需要关心创建的实例具体为哪个子类,我们只需要根据
         * Calendar规定的方法来使用就可以了。
         */
        //构造出来表示当前时间的日历类
        Calendar calendar = Calendar.getInstance();
        /**
         * 日历类所解决的根本问题是简化日期的计算
         * 要想表示某个日期还应使用Date描述
         * Calendar是可以将其描述的时间转化为Date的
         * 我们只需要调用其getTime()方法就可以获取描述的日期的
         * Date对象了
         */
        Date now = calendar.getTime();//获取日历所描述的日期
        System.out.println(now);
        //通过日历类计算时间
        /**
         * 为日历类设置时间
         * 日历类设置时间使用通用方法set
         * set(int field,int value)
         * fiele为时间分量:Calendar提供了相应的常量值
         * value:对应的值
         */
        //设置日历表示2012年
        calendar.set(Calendar.YEAR,2012);
        /*
        * 设置日历表示11月,月份的值是从0开始的,
        * 所以0代表1月以此类推,也可以使用Calendar常量
        */
        calendar.set(Calendar.MONTH,11-1);//Tue Feb 27 20:37:20 CST 2018
        /**
         * 设置日历表示15号
         * DAY_OF_MONTH 月里边的天---号
         * DAY_OF_WEEK 星期里的天---星期几
         * DAY_OF_YEAR 年里的天
         */
        calendar.set(Calendar.DAY_OF_MONTH,15);
        System.out.println(calendar.getTime());//Thu Nov 15 20:37:20 CST 2012
        /**
         * 想得知22天以后是哪天
         */
        calendar.add(Calendar.DAY_OF_YEAR,22);
        System.out.println(calendar.getTime());//Fri Dec 07 20:37:20 CST 2012
        /**
         * 想得知5天前是哪天
         */
        calendar.add(Calendar.DAY_OF_YEAR,-5);
        System.out.println(calendar.getTime());//Sun Dec 02 20:37:20 CST 2012
        /**
         * 想得知一个月后是哪天?
         */
        calendar.add(Calendar.MONTH,1);
        System.out.println(calendar.getTime());//Wed Jan 02 20:37:20 CST 2013
        /**
         * 想获取当前日历表示的日期中的某个时间单位
         * 可以使用get方法
         */
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        //month要处理,+1要加上括号,否则变成字符串拼接了
        System.out.println(year+"年"+(month+1)+"月"+day+"日");
    }
}
//新建日期对象,有默认的日期格式
Date date = new Date();
System.out.println(date);      //Fri Feb 23 14:59:34 CST 2018

//获取日期格式对象,第一种,年月日 星期
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);   //返回一个DateFormat对象,只有日期
String s_date = df.format(date);                               //按照格式对象格式对date进行格式化
System.out.println(s_date);         //2018年2月23日 星期五

//第二种,年月日星期时分秒
df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);  //还有小时
s_date = df.format(date);
System.out.println(s_date);        // 2018年2月23日 星期五 下午02时59分34秒 CST

//第三,自定义日期显示格式
df = new SimpleDateFormat("yyyy/MM/dd  hh:mm:ss");    //定义日期格式
s_date = df.format(date);            // 设置日期格式,并且返回一个日期字符串
System.out.println(s_date);    //2018/02/23  02:59:34

//日期转换成默认日期
Date d = df.parse(s_date);          //按照某个格式转化成标准日期
System.out.println(d);         //Fri Feb 23 02:59:34 CST 2018

SimpleDateFormat类

  • 该类的作用是可以很方便的在字符串和日期类之间相互装行。
  • 我们可以将一个描述日期的字符串:2012-01-01转换为一个Date对象。
  • 同样,我们可以将一个描述日期的Date对象转换为2012-01-01这样格式的字符串来表示

图片 1

常用格式字符串

字符 含义 实例
y yyyy年——2013年;yy——13年
M MM月——01月;M月——1月
d dd日——06日;d日——6日
E 星期 E——星期日(Sun)
a AM或PM标识 a——下午(PM)
H 小时(24小时制) 见下面实例
h 小时(12小时制) a h时——下午12时
m 分钟 HH:mm:ss——12:46:33
s hh(a):mm:ss——12(下午):45:46
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 日期转换类SimpleDateFormat
 * 这里我们字符串与日期类间相互转换是需要一些约束的
 * “2018-02-28”这个字符串如何转换为Date对象?
 * SimpleDateFormat用来描述日期的格式
 * yyyy-MM-dd   2018-02-28
 * yy-MM-dd   18-02-28
 * yyyy-MM-dd hh:mm:ss   2018-02-28 09:20:53
 * yyyy年MM月dd日 hh时mm分ss秒   2018年02月28日 09时20分53秒
 */
public class SimpleDateFormatTest {
    public static void main(String[] args) throws ParseException {
        /**
         * 创建一个SimpleDateFormat并告知它要读取的字符串的格式
         */
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        //创建一个日期格式的字符串
        String dateFormat = "2018-02-28";
        Date date = sdf.parse(dateFormat);//这里有个格式不匹配异常需要抛出或捕获
        System.out.println(date);//Wed Feb 28 00:00:00 CST 2018
        /*
        * 反向操作,我们也可以将一个Date对象转换为它所描述的日期
        * 的字符串。同样,转换出来的字符串格式是
        * SimpleDateFormat创建的时候设置的格式
        */
        Date now = new Date();//创建用于描述当前系统时间的Date
        String nowStr = sdf.format(now);
        System.out.println(nowStr);//2018-02-28
        sdf=new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");
        nowStr = sdf.format(now);
        System.out.println(nowStr);//2018年02月28日 10时47分11秒
        sdf=new SimpleDateFormat("yyyy/MM/dd a hh/mm/ss E");
        nowStr = sdf.format(now);
        System.out.println(nowStr);//2018/02/28 上午 10/47/11 星期三
    }
}

###################################################################
毫秒值和日期相互转换

long time = System.currentTimeMillis();
Date dt = new Date(time);
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
String s = df.format(dt);
System.out.println(s);
//日期转换成毫秒值
long ti = dt.getTime();
System.out.println(ti);

 

图片 2

网站地图xml地图