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 创建
package 第12个程序_时间.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 常用方法
package 第12个程序_时间.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 练习
输出:
package 第12个程序_时间.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 日期转字符串
package 第12个程序_时间.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 字符串转日期
package 第12个程序_时间.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
package 第12个程序_时间.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转换
package 第12个程序_时间.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 翻日历
package 第12个程序_时间.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天是哪天
package 第12个程序_时间.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());
}
}