【java 基础 之 日期格式化大总结SimpleDateFormat,Calendar】

争取总结的全面一些,以供参考使用。

Date类

long currentTimeMillis = System.currentTimeMillis();//获取当前时间戳
        //Date date = new Date(currentTimeMillis);

        //和上面的两行代码效果一样,都是获取当前时间
        Date date = new Date();

        System.out.println(date.getTime());//得到当前时间的时间戳
        System.out.println(date.toGMTString());
        System.out.println(date.toLocaleString());
        System.out.println(date.toString());

打印结果:
1504862638000
8 Sep 2017 09:09:25 GMT
2017-9-8 17:09:25
Fri Sep 08 17:09:25 CST 2017

SimpleDateFormat类

先贴出一个全面的参考文档:

/**
     * SimpleDateFormat函数语法:
     * G 年代标志符
     * y 年
     * M 月
     * d 日
     * h 时 在上午或下午 (1~12)
     * H 时 在一天中 (0~23)
     * m 分
     * s 秒
     * S 毫秒
     * E 星期
     * D 一年中的第几天
     * F 一月中第几个星期几
     * w 一年中第几个星期
     * W 一月中第几个星期
     * a 上午 / 下午 标记符
     * k 时 在一天中 (1~24)
     * K 时 在上午或下午 (0~11)
     * z 时区
     */
  d               月中的某一天。一位数的日期没有前导零。  
  dd             月中的某一天。一位数的日期有一个前导零。  
  ddd           周中某天的缩写名称,在   AbbreviatedDayNames   中定义。  
  dddd         周中某天的完整名称,在   DayNames   中定义。  
  M               月份数字。一位数的月份没有前导零。  
  MM             月份数字。一位数的月份有一个前导零。  
  MMM           月份的缩写名称,在   AbbreviatedMonthNames   中定义。  
  MMMM         月份的完整名称,在   MonthNames   中定义。  
  y               不包含纪元的年份。不具有前导零。  
  yy             不包含纪元的年份。具有前导零。  
  yyyy         包括纪元的四位数的年份。  
  gg             时期或纪元。  
  h               12   小时制的小时。一位数的小时数没有前导零。  
  hh             12   小时制的小时。一位数的小时数有前导零。  
  H               24   小时制的小时。一位数的小时数没有前导零。  
  HH             24   小时制的小时。一位数的小时数有前导零。  
  m               分钟。一位数的分钟数没有前导零。  
  mm             分钟。一位数的分钟数有一个前导零。  
  s               秒。一位数的秒数没有前导零。  
  ss             秒。一位数的秒数有一个前导零。  
  f               秒的小数精度为一位。其余数字被截断。

感觉会经常常用的:
(1)

 //这里 "yyyy年MM月dd日 HH:mm:ss" HH:代表24小时制,hh:代表12小时制
 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

        long currentTimeMillis = System.currentTimeMillis();//获取当前时间戳
        //Date date = new Date(currentTimeMillis);

        //和上面的两个代码效果一样,都是获取当前时间
        Date date = new Date();

        //传入时间戳
        String strDate1 = simpleDateFormat.format(currentTimeMillis);
        System.out.println("TestJava.main strDate=" + strDate1);
        //传入Date实例,效果和上面的一样
        String strDate2 = simpleDateFormat.format(date);
        System.out.println("TestJava.main strDate=" + strDate2);

打印结果:
TestJava.main strDate=2017年09月08日 17:11:19
TestJava.main strDate=2017年09月08日 17:11:19

(2)

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String str = "2017年09月08日 17:23:58";
        try {
            Date date1 = simpleDateFormat.parse(str);
            long time = date1.getTime();
            System.out.println("TestJava.main time=" + time);
        } catch (ParseException e) {
            e.printStackTrace();
        }

打印结果:
TestJava.main time=1504862638000

使用不是很频繁的:

 SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss:SS");
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat simpleDateFormat4 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");

        SimpleDateFormat simpleDateFormat5 = new SimpleDateFormat("yy年MM月dd日 HH:mm");

        SimpleDateFormat simpleDateFormat6=new SimpleDateFormat("一年中的第 D 天, 一年中第w个星期, 一月中第W个星期, 在一天中k时, z时区, 在 a ");

        Date date = new Date();

        System.out.println(simpleDateFormat1.format(date));
        System.out.println(simpleDateFormat2.format(date));
        System.out.println(simpleDateFormat3.format(date));
        System.out.println(simpleDateFormat4.format(date));
        System.out.println(simpleDateFormat5.format(date));
        System.out.println(simpleDateFormat6.format(date));

打印结果:
2017年09月09日 08:55:41:985
2017/09/09 08:55:41
2017-09-09 08:55:41
2017年09月09日 08:55:41 星期六
17年09月09日 08:55
一年中的第 252 天, 一年中第36个星期, 一月中第2个星期, 在一天中8时, CST时区, 在 上午


Calendar

注意事项:
Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。
而 Calendar.DAY_OF_WEEK 定义和值如下:

    Calendar.SUNDAY = 1

    Calendar.MONDAY = 2

    Calendar.TUESDAY = 3

    Calendar.WEDNESDAY = 4

    Calendar.THURSDAY = 5

    Calendar.FRIDAY = 6

    Calendar.SATURDAY = 7
 // 创建 Calendar 对象
        Calendar calendar = Calendar.getInstance();
        //calendar.set(2017,9,8);
        calendar.setTime(new Date());

        // 显示年份
        int year = calendar.get(Calendar.YEAR);
        System.out.println("year is = " + String.valueOf(year));

        // 显示月份 (从0开始, 实际显示要加一)
        int month = calendar.get(Calendar.MONTH);
        System.out.println("nth is = " + (month + 1));

        int date = calendar.get(Calendar.DATE);
        System.out.println("date is = " + date);


        // 本周几
        int week = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println("week is = " + week);

        // 今年的第 N 天
        int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);
        System.out.println("DAY_OF_YEAR is = " + DAY_OF_YEAR);

        // 本月第 N 天
        int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH));

        // 3小时以后
        calendar.add(Calendar.HOUR_OF_DAY, 3);
        int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);
        System.out.println("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY);

        // 当前分钟数
        int MINUTE = calendar.get(Calendar.MINUTE);
        System.out.println("MINUTE = " + MINUTE);

        // 15 分钟以后
        calendar.add(Calendar.MINUTE, 15);
        MINUTE = calendar.get(Calendar.MINUTE);
        System.out.println("MINUTE + 15 = " + MINUTE);

        // 30分钟前
        calendar.add(Calendar.MINUTE, -30);
        MINUTE = calendar.get(Calendar.MINUTE);
        System.out.println("MINUTE - 30 = " + MINUTE);

        // 格式化显示,由于前面对时间,进行了后调和前调,打印的时间也不会是当前时间啦
        String str1 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
        System.out.println(str1);

        // 重置 Calendar 显示当前时间
        calendar.setTime(new Date());
        String str2 = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
        System.out.println(str2);

打印结果:
year is = 2017
nth is = 9
date is = 9
week is = 7
DAY_OF_YEAR is = 252
DAY_OF_MONTH = 9
HOUR_OF_DAY + 3 = 12
MINUTE = 38
MINUTE + 15 = 53
MINUTE - 30 = 23
2017-09-09 12:23:08:775
2017-09-09 09:38:08:780


String.format

(1)常用日期和时间的格式化

public static void main(String[] args) {

        Date today = new Date();

        String a = String.format("%tF", today);
        String b = String.format("%tD", today);
        String c = String.format("%tr", today);
        String d = String.format("%tT", today);
        String e = String.format("%tR", today);
        String m = String.format("%tS", today);//获取秒

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(m);


    }

打印结果:
2017-09-09
09/09/17
09:54:50 上午
09:54:50
09:54
50

(2)对日期的格式化

        Date today = new Date();

        String a1 = String.format(Locale.US, "%tb", today);//英文的星期简写
        String a2 = String.format(Locale.US, "%tB", today);//英文的星期全写

        String b = String.format("%ta", today);
        String c = String.format("%tA", today);


        String d = String.format("%tY", today);
        String e = String.format("%ty", today);

        String g = String.format("%tm", today);//获取月
        String i = String.format("%td", today);//获取日
        String m = String.format("%te", today);//获取日
        String n = String.format("%tj", today);//获取是一年的第多少天

        System.out.println(a1);
        System.out.println(a2);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(g);
        System.out.println(i);
        System.out.println(m);
        System.out.println(n);

打印结果:
Sep
September
星期六
星期六
2017
17
09
09
9
252

(3)对时间的格式化

Date today = new Date();

        String a1 = String.format("%tH", today); //获取21小时制的小时(补0)
        String a2 = String.format("%tk", today);//获取21小时制的小时(不补0)

        String b = String.format("%tI", today);//获取12小时制的小时(补0)
        String c = String.format("%tl", today);//获取12小时制的小时(不补0)


        String d = String.format("%tM", today);//获取分钟
        String e = String.format("%tS", today);//获取秒
        String f = String.format("%tL", today);//获取3位的毫秒
        String f1 = String.format("%tN", today);//获取9位的毫秒

        String g = String.format("%tp", today);//显示上下午标记
        String i = String.format(Locale.US, "%tp", today);//显示上下午标记

        System.out.println(a1);
        System.out.println(a2);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);
        System.out.println(f1);
        System.out.println(g);
        System.out.println(i);

打印结果:

11
11
11
11
32
31
090
090000000
上午
am
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值