Reputation: 2814
I am tring to get the current time in Israel in java this is my code:
TimeZone timeZone = TimeZone.getTimeZone("Israel");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(timeZone);
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
String curTime=timeFormat.format(calendar.getTime());
but it is always bring me 7 hours less from the current time in Israel someone have idea how to achieve the current time in Israel?
Upvotes: 10
Views: 6535
Reputation: 79435
The java.util
Date-Time API and their formatting API, SimpleDateFormat
are outdated and error-prone. It is recommended to stop using them completely and switch to the modern Date-Time API*.
Solution using java.time
, the modern Date-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);
}
}
Output from a sample run:
15:06:50.207521
If you want the format to be restricted to HH:mm
, a couple of ways to to do so are:
LocalTime
to ChronoUnit.MINUTES
.DateTimeFormatter
with the pattern, HH:mm
.Demo:
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);
}
}
Output from a sample run:
16:01
16:01
Learn more about the modern Date-Time API from Trail: Date Time.
* For any reason, if you have to stick to Java 6 or Java 7, you can use ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and How to use ThreeTenABP in Android Project.
Upvotes: 1
Reputation: 46871
Try with Locale
along with TimeZone
if you want to display date also along with time in your language.
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());
Note: This is not the answer of this question but just here if in case OP is looking further for parsing date in Israel language.
Upvotes: 2
Reputation: 1502546
You're setting the time zone in your calendar, but you should be setting it in your DateFormat
. Additionally, you should be using Asia/Jerusalem
as the time zone name. You don't need a Calendar
at all - just new Date()
gives the current instant:
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
timeFormat.setTimeZone(TimeZone.getTimeZone("Asia/Jerusalem"));
String curTime = timeFormat.format(new Date());
You should note that the time zone in Jerusalem is particularly hard to predict (it fluctuates a lot) so if the time zone data source that your JVM uses is out of date, it may be inaccurate.
Upvotes: 21
Reputation: 4111
I am not sure if "Israel" is a valid timezone, try "Asia/Jerusalem", have a look at this post
Upvotes: 3