时间是一个,我们生活中最常见也是最重要的东西,在不同的国家不同的地区时间的表现方式都不一样,当然当你获得一个时间,或则时间戳,你该怎么让这个时间符合中国人的审美观呢,今天我们就来说一下时间的各种处理方法。
时间的长整数表示,是Java中最常见的,需要加工才能出现,我们喜欢的,能看懂的时间格式。而在Java中是这样表示的
代码如下(示例):
public class Test01 {
public static void main(String[] args) {
// 时间的长整数表示
System.out.println(System.currentTimeMillis());
}
代码如下(输出):
1611390612099
输出的1611390612099表示的是从1970-01-01 00:00:00:000开始到现在所经历的毫秒数,而在计算机中为了方便保存时以一个这样的时间戳来保存的,所以拿到这么个时间戳,如果不经过处理,别说普通的没接触过代码的人看不懂,就连我们搞编程的第一次见到都发蒙,所以我们就得对它进行一定的处理,让它为多数人接受。
类 | 作用 |
---|---|
java.util.Date | Java程序中通常用它表示日期 |
SimpleDateFormat | 实现日期和字符串之间的转换 |
Local | 表示特定的地理、政治、文化地区 |
Calendar(*)l | 日期类,封装了年月日时分秒和时区 |
java.sql.Date | 主要在数据库中操作日期,因为数据库中不直接支持 java.util.Date |
由于我还没学到数据库,还有java.util.Date和Calendar(*)的使用方法基本相同,我们今天主要用的是前三个
代码如下(示例):
// 导包一定是import java.util.Date
import java.util.Date;
public class Test02 {
public static void main(String[] args) {
// 获取时间的Date对象
Date date = new Date();
// 获取当前时间距离1970-01-01 00:00:00:000的毫秒值表示形式
// 最常用的应该是int类型的,但是int类型的表示范围不够了,所以用比int强的long
long time = date.getTime();
System.out.println(time);
代码如下(输出):
1611392755401
java.util.Date主要是获取获取当前时间距离1970-01-01 00:00:00:000时间戳
1.日期的默认格式国际标准表示
代码如下(示例):
import java.util.Date;
public class Test03 {
public static void main(String[] args) {
// 国际标准
Date date = new Date();
System.out.println(date);
}
}
代码如下(输出):
Sat Jan 23 17:19:08 CST 2021
上面的输出结果作为一个中国人看着不太懂,作为一个英语欠佳的中国人看着更不懂,所以我们就得将这个东西格式化输出,让人一看就懂的东西。就得用SimpleDateFormat这个小帮手了。
代码如下(示例):
import java.util.Locale;
public class Test01 {
public static void main(String[] args) {
// 获取此虚拟机实例当前默认语言环境值
Locale locale = Locale.getDefault();
System.out.println(locale);
}
}
代码如下(输出):
zh_CN
输出zh_CN的意思是中国中文,其实就是给SimpleDateFormat提供辅助,让虚拟机能识别输出中文模式。
代码如下(例子):
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Test03 {
public static void main(String[] args) {
Date date = new Date();
System.out.println("格式化前的日期为:"+date);
// 定制日期格式为yyyy-MM-dd HH:mm:ss
SimpleDateFormat simpleDateFormat01 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
String time01 = simpleDateFormat01.format(date);
System.out.println("格式化后的日期为:"+time01);
// 定制日期格式为yyyy年MM月dd日 HH:mm:ss
SimpleDateFormat simpleDateFormat02 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());
String time02 = simpleDateFormat02.format(date);
System.out.println("格式化后的日期为:"+time02);
代码如下(输出):
格式化前的日期为:Sat Jan 23 17:43:28 CST 2021
格式化后的日期为:2021-01-23 17:43:28
格式化后的日期为:2021年01月23日 17:43:28
说大白话,其实java.util.Date,Local都是为SimpleDateFormat服务的,SimpleDateFormat有还几个重载的函数,但是我选的是最常用的那个,此函数的需要两个实参就是java.util.Date,Local提供的。
代码如下(例子):
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Test04 {
public static void main(String[] args) throws ParseException {
String string = "2021年01月23日 17:43:28";
System.out.println("解析前的字符串为:"+string);
SimpleDateFormat simpleDateFormat01 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());
Date date = simpleDateFormat01.parse(string);
System.out.println("解析后的国际标准日期为:"+date);
}
}
代码如下(输出):
解析前的字符串为:2021年01月23日 17:43:28
解析后的国际标准日期为:Sat Jan 23 17:43:28 CST 2021
时间字符串的格式应与SimpleDateFormat中的pattern一致,否则会报Unparseable date: "2021年01月23日 17:43:28这个错,匹配不上。
代码如下(例子):
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Test05 {
public static void main(String[] args) {
Date date = new Date();
//获取当前时间距离1970-01-01 00:00:00:000的毫秒值表示形式的时间戳
long timeStamp = date.getTime();
System.out.println("没有经过转换的时间戳为:"+timeStamp);
SimpleDateFormat simpleDateFormat01 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());
String string = simpleDateFormat01.format(timeStamp);
System.out.println("经过转换后的字符串为:"+string);
}
代码如下(输出):
没有经过转换的时间戳为:1611397627289
经过转换后的字符串为:2021年01月23日 18:27:07
代码如下(例子):
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Test06 {
public static void main(String[] args) throws ParseException {
String string = "2021年01月23日 18:27:07";
System.out.println("原始字符串为:"+string);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());
Date date = simpleDateFormat.parse(string);
System.out.println("字符串经过转换变成的国际标准时间格式:"+date);
long timeStamp = date.getTime();
System.out.println("国际标准时间格式转换成的时间戳为:"+timeStamp);
}
}
代码如下(输出):
原始字符串为:2021年01月23日 18:27:07
字符串经过转换变成的国际标准时间格式:Sat Jan 23 18:27:07 CST 2021
国际标准时间格式转换成的时间戳为:1611397627000
有人会问为什么没有日期对象转换成字符串呢,其实我已经说过了,向上一个大例子 3.定制日期输出格式里面的例子就是了。
从这几个例子中我们可以发现的点是:
1、时间字符串的格式应与SimpleDateFormat中的pattern一致。
2、只要遇见其他时间类型转成字符串的如下面黄色部分都是SimpleDateForma.format。遇见其转成时间类型的就是SimpleDateForma.parse。
3、导包一定要导对
其实时间的日期的转发还有多,但是基本上都有一个主流,但是最好理解的也有,作为初学者我更注重的是理解,现在的主流排其次吧。