java - Calender.getTime() 的奇怪行为

标签 java

我的日历日期设置为美国/太平洋时区,但当我打印时

    Calender dateCalender = getDateFromFile();
    System.out.println("Calender TimeZone: " + dateCalender.getTimeZone().getDisplayName());
    System.out.println("Calender : " + dateCalender.getTime());

它打印完全相同的日期/时间,但时区为 IST(我来自印度)。例如,它打印

Calender TimeZone: **Pacific Standard Time**
Calender : Wed Oct 09 00:00:00 **IST** 2013

我尝试使用调试器并尝试查看它显示的 dateCalender 值

java.util.GregorianCalendar[time=1381257000000,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="US/Pacific",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=US/Pacific,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=282,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=19800000,DST_OFFSET=0]

我不明白 Calender getTime 的这种行为。请告诉我如何以相同时区格式打印日期。

最佳答案

代码中没有错误。 dateCalender.getTimeZone().getDisplayName() 打印出与日历关联的时区,而 dateCalender.getTime() 创建一个日期对象。日期对象始终使用标准系统时区打印。

要使用日历时区进行打印:

    DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
    formatter.setTimeZone(dateCalender.getTimeZone());
    System.out.println(formatter.format(dateCalender.getTime()));

关于java - Calender.getTime() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19428547/

相关文章:

java - 使用 Groovy 或 Java 将日志发送到 Syslog 服务器

java - 为什么session.invalidate在IE浏览器中不起作用?

java - 如何将派生对象设为 null 作为基类

java - 如何将响应从 Web 服务器发送到 iphone?

java - 评估不包括 xml 标记的 XPath 查询

java - 使用struts检查pfx文件类型

java - 如何绑定(bind)带有文件输入的 HTML 表单和后端的 Spring RestController(无 JS)

Java 通过 Socket 传输属性

java - 在 Java 中,如何组合两个 JSON 对象数组?

java - 使用 FXML 在 JavaFX 中检测鼠标何时具有 'stopped moving'