Java中使用SimpleDateFormat类进行String类和Date类的相互转换

  • 1. Date对象中,年月日时分秒毫秒的写入和读出
  • 2. Date对象中,星期几的写入和读出



先说结论:

经过实际尝试,猜测:中文环境下, 英文的星期几(如"Monday")无法写入Date对象中, 而中文的星期几(如"周一", “星期一”)可以写入Date对象。但星期几的确可以从Date对象中读取出来, 读取出来的也是中文的星期几。而年月日时分秒毫秒的写入和读取都是可行的。

下面是实验过程:

1. Date对象中,年月日时分秒毫秒的写入和读出

首先我们试着把String对象转换成Date对象,再把Date对象转换回String对象并输出。

//练习:把String转换成Date对象,再把Date对象按原来的格式转换成String输出

	//表示时间的原字符串originalStringWhichShowsTime
	String originalStringWhichShowsTime = "2020年07月22日时间14:25:01.568";
	
	//originalStringWhichShowsTime对应的日期格式dateFormatOfOriginalStringWhichShowsTime
	DateFormat dateFormatOfOriginalStringWhichShowsTime = new SimpleDateFormat("yyyy年MM月dd日时间HH:mm:ss.SSS");
	
	//把字符串按照格式解析成日期
	Date dateOfOriginalStringWhichShowsTime = dateFormatOfOriginalStringWhichShowsTime.parse(originalStringWhichShowsTime);
	
	//把日期按照格式,格式化为字符串
	String newStringWhichShowsTime = dateFormatOfOriginalStringWhichShowsTime.format(dateOfOriginalStringWhichShowsTime);
	System.out.println(newStringWhichShowsTime);

运行结果:

java中Date格式转换为Interge java中date转换成string_System


可以看到年、月、日、时、分、秒、毫秒都被成功写入到Date对象中,并且能成功读取出来。

2. Date对象中,星期几的写入和读出

我们稍微把代码改一下,在原字符串中加入星期几,试着把星期几写入Date对象,并重新读出来。
注意,我在原字符串originalStringWhichShowsTime当中
加入了星期三Wed。并且根据原字符串的变化把对应的格式dateFormatOfOriginalStringWhichShowsTime改了

//表示时间的原字符串originalStringWhichShowsTime
	String originalStringWhichShowsTime = "2020年07月22日Wed时间14:25:01.568";
	
	//originalStringWhichShowsTime对应的日期格式dateFormatOfOriginalStringWhichShowsTime
	DateFormat dateFormatOfOriginalStringWhichShowsTime = new SimpleDateFormat("yyyy年MM月dd日EEE时间HH:mm:ss.SSS");
	
	//把字符串按照格式解析成日期
	Date dateOfOriginalStringWhichShowsTime = dateFormatOfOriginalStringWhichShowsTime.parse(originalStringWhichShowsTime);
	
	//把日期按照格式,格式化为字符串
	String newStringWhichShowsTime = dateFormatOfOriginalStringWhichShowsTime.format(dateOfOriginalStringWhichShowsTime);
	System.out.println(newStringWhichShowsTime);

运行结果:

java中Date格式转换为Interge java中date转换成string_字符串_02


可以看到,出现了解析异常(ParseException)。日期无法解析(Unparseable date)。

基本上可以猜测原因是:星期几无法写入Date对象中。但是这里我有一个疏忽, 中文语言环境下的星期几, 要写成"周一"或"星期一", 写成英文的"Monday"就解析不了. 所以还是要多实践, 实践出真知.

我们再改一下代码:不把星期几写入Date对象,尝试从Date对象中把星期几读取出来。

//表示时间的原字符串originalStringWhichShowsTime
        String originalStringWhichShowsTime = "2020年07月22日时间14:25:01.568";

        //originalStringWhichShowsTime对应的日期格式dateFormatOfOriginalStringWhichShowsTime
        DateFormat dateFormatOfOriginalStringWhichShowsTime = new SimpleDateFormat("yyyy年MM月dd日时间HH:mm:ss.SSS");
        DateFormat dateFormatShowingDayOfTheWeek = new SimpleDateFormat("yyyy年MM月dd日EEE时间HH:mm:ss.SSS");

        //把字符串按照格式解析成日期
        Date dateOfOriginalStringWhichShowsTime = dateFormatOfOriginalStringWhichShowsTime.parse(originalStringWhichShowsTime);

        //把日期按照格式,格式化为字符串
        String newStringWhichShowsTime = dateFormatOfOriginalStringWhichShowsTime.format(dateOfOriginalStringWhichShowsTime);
        String newStringShowingDayOfTheWeek = dateFormatShowingDayOfTheWeek.format(dateOfOriginalStringWhichShowsTime);
        System.out.println(newStringWhichShowsTime);
        System.out.println(newStringShowingDayOfTheWeek);

运行结果:

java中Date格式转换为Interge java中date转换成string_System_03


可以看到未被写入星期几的Date对象,也可以读取出星期几来。猜测:可能是根据年月日来推算出星期几。