Java08-日期

https://www.nowcoder.com/tutorial/94/ae05554a3ad84e42b6f9fc4d52859dc4

https://how2j.cn/k/date/date-date/346.html

1 Date

对应 java.util.Date;
java.sql.Date 是数据库的!

1.1 时间原点

时间在计算机中以 数字 存储
1970年1月1日 8点0分0秒 对应 数字0,每过1秒,数字加1
其中的8点:中国太平洋时区是UTC-8,和 格林威治 时间差8小时

1.2 创建

package12个程序_时间.a1_创建;

import java.util.Date;

public class test {
    public static void main(String[] args) {
        Date d1 = new Date();
        System.out.println("当前时间:" + d1 + "\n");

        Date d2 = new Date(5000);
        System.out.println("从1970年1月1日 早上8点0分0秒 开始经历了5秒的时间");
        System.out.println(d2 + "\n");
    }
}

1.3 常用方法

package12个程序_时间.a2_常用方法;

import java.util.Date;

public class test {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println("当前时间: " + now.toString());
        System.out.println("当前时间: " + now.getTime());
        System.out.println("当前时间: " + System.currentTimeMillis());
    }
}

1.4 练习

输出:

package12个程序_时间.a3_练习1;

import java.util.Date;

public class test {
    public static void main(String[] args) {
        long s = 1000;
        long min = 60*s;
        long hour = 60*min;
        long day = 24*hour;
        long year = 365*day;

        long start1995 = (1995-1970)*year;
        long leapday = (1995-1970)/4*day;//这是闰年多出来的一天!
        start1995 += leapday;
        start1995 -= 8*hour;

        Date date1 = new Date(start1995);
        System.out.println("1995年第一天: " + date1);

        long end1995 = start1995 + year - 1;
        Date date2 = new Date(end1995);
        System.out.println("1995年最后一天: " + date2);

        long randomtime = (long)(Math.random()*(year-1) + start1995);
        Date date3 = new Date(randomtime);
        System.out.println("随机时间: " + date3);
    }
}

2 格式化 SimpleDateFormat

2.1 日期转字符串

package12个程序_时间.a4_格式化;

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

//日期转字符串
public class test1 {
    public static void main(String[] args) {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        Date date1 = new Date();
        String str1 = sdf1.format(date1);
        System.out.println("str1 = " + str1);

        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        Date date2 = new Date();
        String str2 = sdf2.format(date2);
        System.out.println("str2 = " + str2);
    }
}

2.2 字符串转日期

package12个程序_时间.a4_格式化;

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

public class test2 {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String str = "2020/11/03 10:34:35";

        try{
            Date date = sdf.parse(str);
            System.out.printf("字符串 %s 通过sdf.parse - yyyy/MM/dd HH:mm:ss \n转换为日期: %s",str,date.toString());
        }catch (ParseException e){
            e.printStackTrace();
        }
    }
}

2.3 练习

准备长度是9的日期数组
1970 - 2000年之间的随机日期初始化该数组
按日期的时间 升序排序
比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的时间更小,虽然日期更大
时间:12:33:22 < 19:07:23
日期:1988-1-21 > 1978-4-21

package12个程序_时间.a5_练习2;

import java.lang.reflect.Array;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

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

        //随机生成时间
        for(int i = 0; i < 9; i++){
            long year = (long)Math.random()*100;
            long rand = (long)(Math.random()*1000*60*60*24*365 + year);
            Date date = new Date(rand);
            dates[i] = sdf.format(date);
        }

        //输出日期时间
        System.out.println("随机时间日期:");
        for(int i = 0; i < 9; i++){
            System.out.print(i+1 + " : " + dates[i] + "   ");
            if((i+1)%3==0)
                System.out.println();
        }
        System.out.println();

        //开始排序
        System.out.println("尝试排序...");
        String[] temp = new String[9];
        //取时间
        for(int i = 0 ; i < 9; i ++){
            temp[i] = dates[i].substring(11);
        }
        System.out.println(Arrays.toString(temp));
        Arrays.sort(temp);
        System.out.println(Arrays.toString(temp));

        for (int i = 0; i < 9; i++){
            for(int j = i; j < 9; j++){
                String s = dates[j].substring(11);
                if(temp[i].equals(s) && i!=j){
                    String t = dates[i];
                    dates[i] = dates[j];
                    dates[j] = t;
                }
            }
        }
        System.out.println("排序成功!\n");

        //输出日期时间
        System.out.println("随机时间日期:");
        for(int i = 0; i < 9; i++){
            System.out.print(i+1 + " : " + dates[i] + "   ");
            if((i+1)%3==0)
                System.out.println();
        }
    }
}

3 日历 Calendar

3.1 和日期date转换

package12个程序_时间.a6_Calendar与Date进行转换;

import java.util.Calendar;
import java.util.Date;

public class test {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        Date d1 = c.getTime();
        Date d2 = new Date(0);
        System.out.println("c = " + c);
        System.out.println("d1 = " + d1);
        System.out.println("d2 = " + d2);

        c.setTime(d2);
        System.out.println("c = " + c);
    }
}

3.2 翻日历

package12个程序_时间.a7_翻日历;

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

public class test {
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static String format(Date date){
        return sdf.format(date);
    }

    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        Date now = c.getTime();
        System.out.println("当前时间: " + format(c.getTime()));

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

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

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

3.3 练习

找出下个月的倒数第3天是哪天

package12个程序_时间.a7_翻日历.练习;

import java.util.Calendar;
import java.util.Date;

public class test {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        Date now = new Date();
        c.setTime(now);
        c.set(Calendar.DATE,1);
        c.add(Calendar.MONTH,2);
        c.add(Calendar.DATE,-3);
        System.out.println("下个月倒数第三天是 " + c.getTime());

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1403034144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值