我想在java中获取当前在以色列的时间这是我的代码:
TimeZone timeZone = TimeZone.getTimeZone("Israel");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(timeZone);
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
String curTime=timeFormat.format(calendar.getTime());
但它总是让我比以色列目前的时间少7个小时有人知道如何在以色列实现目前的时间?
答案 0 :(得分:12)
您在日历中设置了时区,但您应该在DateFormat
中进行设置。此外,您应该使用Asia/Jerusalem
作为时区名称。您根本不需要Calendar
- 只需new Date()
即时:
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
timeFormat.setTimeZone(TimeZone.getTimeZone("Asia/Jerusalem"));
String curTime = timeFormat.format(new Date());
你应该注意到耶路撒冷的时区特别难以预测(它波动很大)所以如果你的JVM使用的时区数据源已经过时,那可能是不准确的。
答案 1 :(得分:3)
我不确定"以色列"是一个有效的时区,请尝试"亚洲/耶路撒冷",看看this帖子
答案 2 :(得分:2)
如果您想要以您的语言显示日期以及时间,请尝试使用Locale
和TimeZone
。
Locale aLocale = new Locale.Builder().setLanguage("iw").setRegion("IL").build();
DateFormat timeFormat = new SimpleDateFormat("MMM y HH:mm", aLocale);
timeFormat.setTimeZone(TimeZone.getTimeZone("Asia/Jerusalem"));
String curTime = timeFormat.format(new Date());
注意:这不是这个问题的答案,只是在这里,如果OP正在进一步寻找用以色列语解析日期。
答案 3 :(得分:1)
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*。
使用 java.time
(现代日期时间 API)的解决方案:
import java.time.LocalTime;
import java.time.ZoneId;
public class Main {
public static void main(String[] args) {
LocalTime time = LocalTime.now(ZoneId.of("Asia/Jerusalem"));
System.out.println(time);
}
}
样本运行的输出:
15:06:50.207521
如果您希望将格式限制为 HH:mm
,可以采用以下几种方法:
LocalTime
截断为 ChronoUnit.MINUTES
。DateTimeFormatter
与模式 HH:mm
一起使用。演示:
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
LocalTime timeHourMinute = LocalTime.now(ZoneId.of("Asia/Jerusalem"))
.truncatedTo(ChronoUnit.MINUTES);
System.out.println(timeHourMinute);
// Alternatively
LocalTime time = LocalTime.now(ZoneId.of("Asia/Jerusalem"));
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm", Locale.ENGLISH);
String strTime = dtf.format(time);
System.out.println(strTime);
}
}
样本运行的输出:
16:01
16:01
从 Trail: Date Time 了解有关现代 Date-Time API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。