我正在编写的程序正在将十六进制值转换为十进制值。十进制值表示自2010年1月1日以来的时间(以秒为单位)。我正在使用Calendar方法将秒数添加到日期中以获得最终的日期/时间。当我调用.useDaylightTime()时,它返回false,但如果使用的是DST,我得到的值是。我在俯视什么吗?
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import java.util.TimeZone;
public class timeSince {
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String hex = input.nextLine();
TimeZone zone = TimeZone.getTimeZone("EST");
System.out.println(zone.useDaylightTime());
Calendar cal = Calendar.getInstance(zone);
cal.set(2010, 0, 1, 0, 0, 0);
cal.add(Calendar.SECOND, Integer.parseInt(hex,16));
Date newDate = cal.getTime();
System.out.println(dateFormat.format(newDate));
}
}
答案 0 :(得分:1)
用于格式化的时区在DateFormat上设置。
dateFormat.setTimeZone(TimeZone.getTimeZone("EST"));
System.out.println(dateFormat.format(newDate));
答案 1 :(得分:1)
与k5_ said一样,SimpleDateFormat
所使用的时区与Calendar
不在同一时区。因此,格式化时,JVM系统时区与用于创建EST
的{{1}}之间的差异会添加到Calendar
中。您最有可能处于newDate
时区。该时区当前正在观察夏令时,因此当您打印America/New_York
时,将看到夏令时的值。
newDate
不是有效的时区,EST
将失败。 ZoneId.of("EST")
只是EST
的非DST一半,另一半是America/New_York
。要正确处理DST更改,请使用EDT
。
使用America/New_York
java.time