朋友圈发布时间(Date、DateFormat、Calendar)

一、日期时间类

1.java.util.Date类:表示特定的瞬间,精确到毫秒

常用方法:

  • public Date() :获取当前时间
  • public Date(long date):把毫秒值转成日期对象
  • public long getTime() :把日期对象转换成对应的时间毫秒值
        //1.创建日期对象,获取当前的时间
        System.out.println(new Date()); //Thu Jul 30 16:48:12 CST 2020
        //2.创建日期对象,把输入的毫秒值转成日期对象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
        //3.把date对象转换成毫秒值
        long l = date.getTime();
        System.out.println(l); //1596100672632

2.java.text.DateFormat类:可以在让Date对象与String对象互相转换,但是DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat

构造方法:

  • public SimpleDateFormat(String pattern):自定时间字符串格式类型
		//创建日期格式化对象,格式自定义
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

格式规则:
朋友圈发布时间(Date、DateFormat、Calendar)_第1张图片
常用方法:

  • public String format(Date date):将Date对象格式化为字符串
  • public Date parse(String source):将字符串解析为Date对象
		//1. Date->String: format();方法
        //创建日期对象,获取当前时间
        Date date = new Date();
        System.out.println(date); //Thu Jul 30 16:48:12 CST 2020
        //创建日期格式化对象,格式自定义
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String moment = df.format(date);
        System.out.println("现在的时间为:" + moment); //现在的时间为:2020-07-30 16:48:12

        //2. String->Date:  parse();方法
        //创建字符串对象,获取指定时间
        String today = "2020年7月30日";
        //创建日期格式化对象,格式自定义
        DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日");
        Date date2 = df2.parse(today);
        System.out.println(date2); //Thu Jul 30 00:00:00 CST 2020

3.java.util.Calendar:日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。

获取方式:
Calendar为抽象类,在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象

  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历
		//使用默认时区和语言环境获得一个日历
        Calendar calendar = Calendar.getInstance();

Calendar类中提供很多成员常量,代表给定的日历字段:
朋友圈发布时间(Date、DateFormat、Calendar)_第2张图片
常用方法:

  • public int get(int field):获取指定字段的值
  • public void set(int field, int value):设置指定字段的值
  • public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量
  • public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象
		//1.创建Calender对象,get()方法
        Calendar cal = Calendar.getInstance();
        //设置年
        int year = cal.get(Calendar.YEAR);
        //设置月,在Calendar类中,月份的表示是以0-11代表1-12月
        int month = cal.get(Calendar.MONTH) + 1;
        //设置日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日"); //2020年7月30日

        //2.set()方法
        cal.set(Calendar.YEAR,2021);
        year = cal.get(Calendar.YEAR);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日"); //2021年7月30日

        //3.add()方法
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日"); //2021年7月30日
        cal.add(Calendar.DAY_OF_MONTH,1); //加一天
        cal.add(Calendar.YEAR,-3); //减3年
        year = cal.get(Calendar.YEAR);
        dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日"); //2018年7月31日

        //4.getTime()方法
        date = cal.getTime();
        System.out.println(date); //Tue Jul 31 19:05:19 CST 2018

二、典型案例

1.需求

当我们发朋友圈时,会有发布的时间,输入一个发朋友圈的时间,判断是多久之前发的

 1,刚刚发布
 2,几分钟前发布(具体的分钟)
 3,半个小时前发布
 4,几小时前发布
 5,昨天发布
 6,几天前发布

2.思路

		//第一步:提示用户输入朋友圈的发布时间
        //第二步:将朋友圈发布时间转化成日期对象
        //第三步:将日期对象转化成毫秒值进行比较(需要此时、昨天、前天三个日期对象)
        //第四步:进行毫秒差值判断
        //第五步:打印朋友圈发布时间输入格式

3.代码实现

package test0730.demo1;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

/**
 * 当我们发朋友圈时,会有发布的时间,输入一个发朋友圈的时间,判断是多久之前发的

 1,刚刚发布
 2,几分钟前发布(具体的分钟)
 3,半个小时前发布
 4,几小时前发布
 5,昨天发布
 6,几天前发布
 */
public class Moments {

    public static void main(String[] args) throws ParseException {

        //第一步:提示用户输入朋友圈的发布时间
        //第二步:将朋友圈发布时间转化成日期对象
        //第三步:将日期对象转化成毫秒值进行比较(需要此时、昨天、前天三个日期对象)
        //第四步:进行毫秒差值判断
        //第五步:打印朋友圈发布时间输入格式

        Moments m = new Moments();
        m.showMoments();
    }

    //朋友圈时间展示
    public void showMoments() throws ParseException {

        System.out.println("请输入朋友圈的发布时间:格式为yyyy-MM-dd HH:mm:ss");
        Scanner sc = new Scanner(System.in);
        String postTime = sc.nextLine(); //朋友圈发布时间

        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //日期格式
        Date postTimeDate = df.parse(postTime); //朋友圈发布日期对象
        Date now = new Date(); //现在日期对象
        Calendar nowC = Calendar.getInstance(); //现在日历对象
        //把时间分钟秒设置为0,就是昨天晚上0点的日历
        nowC.set(Calendar.HOUR_OF_DAY,0);
        nowC.set(Calendar.MINUTE,0);
        nowC.set(Calendar.SECOND,0);
        Date yesterday = nowC.getTime(); //把昨天的日历转换成日期
        nowC.add(Calendar.DAY_OF_MONTH,-1); //前天日历
        Date beforeYesterday = nowC.getTime(); //把前天的日历转换成日期

        //将日期转换成毫秒值
        long postTimeSecond = postTimeDate.getTime();
        long nowSecond = now.getTime(); //此时毫秒值
        long y_secone  = yesterday.getTime(); //昨天毫秒值
        long b_secone  = beforeYesterday.getTime(); //前天毫秒值
        //将两个日期转换成毫秒值,之后得到秒差值
        long secone  = (nowSecond - postTimeSecond)/1000;
        long ySecone = (nowSecond - y_secone)/1000;
        long bSecone = (nowSecond - b_secone)/1000;

        //调用毫秒差值判断方法
        if(secone >= bSecone){
            System.out.println(secone/60/60/24 + "天前发布");
        } else if(secone >= ySecone){
            System.out.println("昨天发布");
        } else if(secone >= 0){
            Moments.seconeJudge(secone);
        } else {
            System.out.println("输入有误");
        }


    }

    //当天发布毫秒差值判断
    public static void seconeJudge(long secone){
        if (secone < 60) {
            System.out.println("刚刚发布");
        } else if (secone/60 < 30) {
            System.out.println(secone/60 + "分钟前发布");
        } else if (secone/60 < 60) {
            System.out.println("半个小时前发布");
        } else if (secone/60/60 < 24) {
            System.out.println(secone/60/60 + "小时前发布");
        }

    }
}

4.运行结果

请输入朋友圈的发布时间:格式为yyyy-MM-dd HH:mm:ss
2020-07-30 22:45:15
刚刚发布

请输入朋友圈的发布时间:格式为yyyy-MM-dd HH:mm:ss
2020-07-30 22:43:15
2分钟前发布

请输入朋友圈的发布时间:格式为yyyy-MM-dd HH:mm:ss
2020-07-30 22:15:15
半个小时前发布

请输入朋友圈的发布时间:格式为yyyy-MM-dd HH:mm:ss
2020-07-30 20:15:15
2小时前发布

请输入朋友圈的发布时间:格式为yyyy-MM-dd HH:mm:ss
2020-07-29 23:59:59
昨天发布

请输入朋友圈的发布时间:格式为yyyy-MM-dd HH:mm:ss
2020-07-15 13:59:59
15天前发布

你可能感兴趣的:(Java练习题,java)