283、Java基础59 - 日期【日期格式化】 2019.11.25

1、SimpleDateFormat 日期格式化类

在这里插入图片描述

2、日期转字符串

y 代表年
M 代表月
d 代表日
H 代表24进制的小时
h 代表12进制的小时
m 代表分钟
s 代表秒
S 代表毫秒
在这里插入图片描述

package date;
  
//
import java.text.SimpleDateFormat;
import java.util.Date;
  
public class TestDate {
  
    public static void main(String[] args) {
          
        //y 代表年
        //M 代表月
        //d 代表日
        //H 代表24进制的小时
        //h 代表12进制的小时
        //m 代表分钟
        //s 代表秒
        //S 代表毫秒
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
        Date d= new Date();
        String str = sdf.format(d);
        System.out.println("当前时间通过 yyyy-MM-dd HH:mm:ss SSS 格式化后的输出: "+str);
         
        SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd" );
        Date d1= new Date();
        String str1 = sdf1.format(d1);
        System.out.println("当前时间通过 yyyy-MM-dd 格式化后的输出: "+str1);
         
    }
}
  • 输出结果
    在这里插入图片描述

3、字符串转日期

模式(yyyy/MM/dd HH:mm:ss)需要和字符串格式保持一致,如果不一样就会抛出解析异常ParseException
在这里插入图片描述

package date;
  
//
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
  
public class TestDate {
  
    public static void main(String[] args) {
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
  
        String str = "2016/1/5 12:12:12";
          
        try {
            Date d = sdf.parse(str);
            System.out.printf("字符串 %s 通过格式  yyyy/MM/dd HH:mm:ss %n转换为日期对象: %s",str,d.toString());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          
    }
}

4、练习:日期格式化

准备一个长度是9的日期数组
使用1970年-2000年之间的随机日期初始化该数组
按照这些日期的时间进行升序排序
比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的时间更小,虽然日期更大
在这里插入图片描述

package pack1;
import java.text.SimpleDateFormat;
import java.util.Date;
 
 
public class DateWork {
    public static void main(String[] args) {
        int num = 9;
        String[] str = new String[num];
        long second = 1000l;
        long minute = 60*second;
        long hour = 60*minute;
        long day = 24*hour;
         
        long year = 365*day;
        long leapYear = 0;
         
         
        //判断从1970-2000有一年闰年就是多了几天!
        for(int i=1970; i<2000; i++) {
            if(i%4==0 && i%100!=0 || i%100==0 && i%400!=0) {
                leapYear += day;
            }       
        }
        long year2000 = 2000*year - 1970*year + leapYear;
        long cha = year2000 - 1970*year;
         
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SS");
        System.out.println("未排序之前***************************");
        System.out.println("");
         
        for(int i=0; i<num; i++) {
            long randomDate = (long)(Math.random()*(1970*year+(cha-8*hour)));
            Date date = new Date(randomDate);
            String str2 = sdf.format(date);
            str[i] = str2;
            System.out.print(str[i]+"       ");
            if((i+1)%3 == 0) {
                System.out.println("");
                System.out.println("");
                 
            }
        }
        //冒泡排序进行重新排序;
        //重新格式化时间yyyyMMdd
         
        System.out.println("排序后的结果是****************************");  
        System.out.println();
        for(int i=0; i<str.length; i++) {
            for(int j=i+1; j<str.length; j++) {
                 
                if(str[i].compareTo(str[j])>0) {
                    String temp = str[i];
                    str[i] = str[j];
                    str[j] = temp;
                }
                }
            System.out.print(str[i]+"       "); 
            if((i+1)%3 == 0) {
                System.out.println();
                System.out.println();
                                         
                }
            }
             
        }
 
    }

  • 输出结果
    在这里插入图片描述

5、Calendar

Calendar类即日历类,常用于进行“翻日历”,比如下个月的今天是多久

6、Calendar与Date进行转换

采用单例模式获取日历对象Calendar.getInstance();

package date;
  
//
import java.util.Calendar;
import java.util.Date;
  
public class TestDate {
  
    public static void main(String[] args) {
        //采用单例模式获取日历对象Calendar.getInstance();
        Calendar c = Calendar.getInstance();
          
        //通过日历对象得到日期对象
        Date d = c.getTime();
  
        Date d2 = new Date(0);
        c.setTime(d2); //把这个日历,调成日期 : 1970.1.1 08:00:00
    }
}

7、翻日历

add方法,在原日期上增加年/月/日
set方法,直接设置年/月/日
在这里插入图片描述

package date;
 
import java.text.SimpleDateFormat;
//
import java.util.Calendar;
import java.util.Date;
 
public class TestDate {
 
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        Date now = c.getTime();
        // 当前日期
        System.out.println("当前日期:\t" + format(c.getTime()));
 
        // 下个月的今天
        c.setTime(now);
        c.add(Calendar.MONTH, 1);
        System.out.println("下个月的今天:\t" +format(c.getTime()));
 
        // 去年的今天
        c.setTime(now);
        c.add(Calendar.YEAR, -1);
        System.out.println("去年的今天:\t" +format(c.getTime()));
 
        // 上个月的第三天
        c.setTime(now);
        c.add(Calendar.MONTH, -1);
        c.set(Calendar.DATE, 3);
        System.out.println("上个月的第三天:\t" +format(c.getTime()));
 
    }
 
    private static String format(Date time) {
        return sdf.format(time);
    }
}

8、练习:Calendar

找出下个月的倒数第3天是哪天
在这里插入图片描述

package charactor;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;

public class TestDate {

    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static void main(String args[]){

        Calendar c = Calendar.getInstance();
        Date now = c.getTime();
        // 当前日期
        System.out.println("当前日期:\t" + format(c.getTime()));

        // 下个月的今天
        c.setTime(now);
        c.add(Calendar.MONTH, 1);
        System.out.println("下个月的今天:\t" +format(c.getTime()));

        // 去年的今天
        c.setTime(now);
        c.add(Calendar.YEAR, -1);
        System.out.println("去年的今天:\t" +format(c.getTime()));

        // 上个月的第三天
        c.setTime(now);
        c.add(Calendar.MONTH, -1);
        c.set(Calendar.DATE, 3);
        System.out.println("上个月的第三天:\t" +format(c.getTime()));

    }

    private static String format(Date time) {
        return sdf.format(time);
    }
}

  • 输出结果
    在这里插入图片描述

9、参考链接

[01] How2j = 日期系列教材 (三)- 如何使用JAVA的CALENDAR类

发布了309 篇原创文章 · 获赞 229 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/youyouwuxin1234/article/details/103242154