在使用TimeZone“Europe / Warsaw”后,我使用以下功能在几秒钟内获得时间。
我正确地获得了日期,但是只要我在几秒钟内转换日期,我的输出就会出错。服务器在TimeZone“Europe / Warsaw”中预计秒数。什么是最好的方法摆脱这个?
public static long getTimeInSeconds() {
try {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Here you say to java the initial timezone. This is the secret
sdf.setTimeZone(TimeZone.getTimeZone("Europe/Warsaw"));
//Will get in Warsaw time zone
String date = sdf.format(calendar.getTime());
Date date1 = sdf.parse(date);
//Convert time in seconds as required by server.
return (date1.getTime() / 1000);
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
“TimeZone中的秒”没有意义,因为纪元秒意味着“自纪元以来的秒数”(其中纪元是1970年1月1日在UTC的午夜),无论时区如何。
这个价值在世界各地都是一样的。但是,相同的纪元秒值可以转换为本地日期和时间,具体取决于时区。
示例:现在,epoch第二个值是1520352472.这个相同的值(自纪元以来的1520352472秒),在世界各地都是一样的。但是,此值可以表示每个时区中的不同日期和时间:
问题是:无论我在哪个时区,epoch秒值都是相同的,所以你根本不需要考虑任何时区。
java.util.Date
类doesn't have any notion of timezone也是,它只包含一个long
值,表示自纪元以来的毫秒数。所以,如果你有一个Date
对象,只需使用这个值并除以1000:
long epochSeconds = new Date().getTime() / 1000;
实际上,如果你只想要当前日期/时间的数值,你甚至不需要创建一个Date
来获取它:
long epochSeconds = System.currentTimeMillis() / 1000;
您需要在从日历中获取时间后设置时区
public static long getTimeInSeconds() {
try {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Will get in Warsaw time zone
String date = sdf.format(calendar.getTime());
//Here you say to java the initial timezone. This is the secret
sdf.setTimeZone(TimeZone.getTimeZone("Europe/Warsaw"));
Date date1 = sdf.parse(date);
//Convert time in seconds as required by server.
return (date1.getTime() / 1000);
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}