1. 理论知识:
/**
* 'Z' 标识 格林威治时间格式,一般有一些标准和一些规范会 添加 'Z' 标识标准,但其实带不带 'Z'都可以
*
* 一般 常用 四种: (只要确定了 格式,不管是 String 转 Date 还是 Date 转 String 都毫无压力)
* new SimpleDateFormat( "yyyyMMddHHmmss'Z'")
* new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
* new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
* new SimpleDateFormat("yyyy-MM-dd")
* 一般,在 Date 转 String 的时候就决定了 格式,因为 手动输入 String 必须符合一定的格式
*/
2. 代码示例,认真看,这个代码足够了。
/**
* @Author 江岩
* @Time 2019-07-23 18:06
*/
package cn.com.infosec.netcert.caAdmin.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
/**
* @Description (补充描述)
* @Author jy
* @Time 2019-07-23 18:06
*/
public class Test_timeChange {
/**
* @Author jy
* @Time 2019-07-23 18:06
* @version 1.0
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
// Calendar 和 Date
Test_timeChange.Calendar_And_Date();
// Date 和 String
Test_timeChange.Date_to_String();
// String 到 Date
Test_timeChange.String_to_Date();
}
// Date 转换 为 String
public static void Date_to_String() throws ParseException {
// Date 转 String
Date date = new Date();
System.out.println(date); // 当前时间输出显示为 :Thu Jul 25 10:16:44 CST 2019
SimpleDateFormat df_1 = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
String str_1 = df_1.format(date);
System.out.println(str_1); // 输出显示为 : 20190725101644Z
SimpleDateFormat df_2 = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
df_2.setTimeZone(TimeZone.getTimeZone("GMT"));
String str_2 = df_2.format(date);
System.out.println(str_2); //输出显示为: 20190725021644Z GMT 国际时间格式,中国时间 = GMT + 8小时,所以输出 时间要早8小时
SimpleDateFormat df_3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str_3 = df_3.format(date);
System.out.println(str_3); // 输出显示为 : 20190725101644Z
}
// String 转换为 Date
public static void String_to_Date() throws ParseException {
// String 转换为 Date 时,String有没有 Z 都可以,格式中会处理
// 切记 不要将 "20190725102542Z" 按 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 格式转换就行,解析时格式不匹配
String str_4 = "20190725102542Z";
SimpleDateFormat df_4 = new SimpleDateFormat("yyyyMMddHHmmss");
Date date_4 = df_4.parse(str_4);
System.out.println(date_4); // 输出显示为 : Thu Jul 25 10:25:42 CST 2019
String str_5 = "2019-07-25 10:25:42Z"; // 有没有Z没有影响
SimpleDateFormat df_5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date_5 = df_5.parse(str_5);
System.out.println(date_5); // 输出显示为 : Thu Jul 25 10:25:42 CST 2019
}
// 讲清楚 Calendar 和 Date 的 关系
public static void Calendar_And_Date() {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2019);
c.set(Calendar.MONTH, 8); // 输出的结果是 9月,表示月的标识有 :MONTH_OF_YEAR 和 MONTH ,请慎重使用
c.set(Calendar.DAY_OF_MONTH, 2); // 输出结果 是 2月,标识日的标识有 DAY_OF_MONTH 和 DATE ,两者结果一致,建议使用前者
c.set(Calendar.HOUR_OF_DAY, 22); // 输出结果是 22时,表示时的标识 有 HOUR_OF_DAY 和 HOUR ,其中 HOUR 为12显示法,超过12默认进位,推荐使用 前者
c.set(Calendar.MINUTE, 30);
c.set(Calendar.SECOND, 10);
// 通常日历需要先转 Date
Date date = c.getTime();
System.out.println(date); // 输出显示为 Mon Sep 02 22:30:10 CST 2019 ,此为Date格式
// 特别注意 c.set(xxxx,xxx); 任何值没有手动设置,将获取当前计算机的时间/系统时间
}
// 应用场景: 数据库获取 20190725101644Z,输出为 2019-07-25 10:16:44
public static void demo() throws ParseException {
// 先根据 String的格式 转为 Date
String str_6 = "20190725101644Z";
SimpleDateFormat df_6 = new SimpleDateFormat("yyyyMMddHHmmss");
Date date_6 = df_6.parse(str_6);
System.out.println(date_6); // 输出显示为:Thu Jul 25 10:16:44 CST 2019
// 再根据需要的格式,转为 String
SimpleDateFormat df_7 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str_7 = df_7.format(date_6);
System.out.println(str_7); // 输出显示为: 2019-07-25 10:16:44
}
}
3. 总结,其实很简单,需要认真看。