Java在以色列获得当前时间

时间:2014-05-10 19:27:17

标签: java timezone

我想在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个小时有人知道如何在以色列实现目前的时间?

4 个答案:

答案 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)

如果您想要以您的语言显示日期以及时间,请尝试使用LocaleTimeZone

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.time

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

ONLINE DEMO

如果您希望将格式限制为 HH:mm,可以采用以下几种方法:

  1. LocalTime 截断为 ChronoUnit.MINUTES
  2. 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

ONLINE DEMO

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 desugaringHow to use ThreeTenABP in Android Project