【发布时间】:2018-06-09 10:53:27
【问题描述】:
我正在尝试将 CET 时间格式转换为 GMT。 原因是我从 XML 获取日期并将其插入到另一个使用 GMT 日期格式的系统中。所以我插入的任何日期都是过去的一天。
这里我从 XML 中获取并将其插入到 Java 对象中:
Date dob = DateUtils.fromXMLGregorianCalendar(customer.getDateOfBirth());
toYYYYMMDD(dob);
CETtoGMT(dob);
personalAccount.setBirthDate(dob);
我的功能:
public static String toYYYYMMDD(Date day) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String date = formatter.format(day);
return date;
}
public String CETtoGMT(Date cetDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
String date = formatter.format(cetDate);
return date;
}
我不确定我做错了什么,但我的测试表明我使用奥斯陆时区作为对象个人帐户出生日期:
Sun Feb 24 00:00:00 CET 1990
cdate = {Gregorian$Date@3163} "1990-02-24T00:00:00.000+0100"
cachedYear = 1990
cachedFixedDateJan1 = 724642
cachedFixedDateNextJan1 = 725007
era = null
year = 1990
month = 2
dayOfMonth = 24
dayOfWeek = 1
leapYear = false
hours = 0
minutes = 0
seconds = 0
millis = 0
fraction = 0
normalized = true
zoneinfo = {ZoneInfo@3165} "sun.util.calendar.ZoneInfo[id="Europe/Oslo",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=141,lastRule=java.util.SimpleTimeZone[id=Europe/Oslo,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]"
zoneOffset = 3600000
daylightSaving = 0
forceStandardTime = false
locale = null
【问题讨论】:
-
在'toYYYYMMDD'函数中你忘记设置时区了。顺便说一句,如果您创建一个单元测试并在 IDE 中调试它,这对您来说将成为一个小问题。
-
您应该记录问题的重要部分,例如
DateUtils是什么。我可能会猜到 Apache Commons Lang,但你不应该让我们猜。