Java,将Date转换为String并返回错误的Date [英] Java, converting Date to String and back produced wrong Date

查看:106
本文介绍了Java,将Date转换为String并返回错误的Date的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 Date 转换为 String ,然后再次转换为 Date 。但是我发现最终日期与原始日期不同,这有什么用?

I am trying to convert a Date to String and then back again to Date. However I found out that the final date is different from the original date, what gives?

    //1975-06-20
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, 1975);
    cal.set(Calendar.MONTH, 5);
    cal.set(Calendar.DAY_OF_MONTH, 20);
    cal.set(Calendar.HOUR, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    System.out.println(cal);

    Date originalDate = cal.getTime();
    System.out.println("Date 1: " + originalDate.toString());

    SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
    Date date = sdf.parse(originalDate.toString());
    System.out.println("Date 2: " + date.toString());

以上代码的输出为:

cal: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Singapore",offset=28800000,dstSavings=0,useDaylight=false,transitions=9,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1975,MONTH=5,WEEK_OF_YEAR=26,WEEK_OF_MONTH=5,DAY_OF_MONTH=20,DAY_OF_YEAR=179,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=0,HOUR_OF_DAY=16,MINUTE=0,SECOND=0,MILLISECOND=333,ZONE_OFFSET=28800000,DST_OFFSET=0]
Date 1: Fri Jun 20 12:00:00 SGT 1975
Date 2: Fri Jun 20 11:30:00 SGT 1975


推荐答案

可能是由于1982年新加坡的时区更改(+ 30分钟)。

Probably because of the timezone change in Singapore on 1982 (+ 30 minutes).

http://www.timeanddate.com/worldclock /timezone.html?n=236&syear=1980

在解析日期时,SimpleDateFormat将SGT设为UTC + 8,然后将其转换为UTC + 7.5,即1982年之前的SGT。因此,日期偏离了30分钟

The SimpleDateFormat take the SGT as UTC+8 when parsing the date, and convert it to UTC+7.5, which is the SGT before 1982. Hence the date is off by 30 minutes.

这篇关于Java,将Date转换为String并返回错误的Date的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆