Текущее время java пример

How to get the current date and time of your timezone in Java?

I have my app hosted in a London Server. I am in Madrid, Spain. So the timezone is -2 hours. How can I obtain the current date / time with my time zone.

Date curr_date = new Date(System.currentTimeMillis()); 
Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE")); 

With Joda-Time

DateTimeZone zone = DateTimeZone.forID("Europe/Madrid"); DateTime dt = new DateTime(zone); int day = dt.getDayOfMonth(); int year = dt.getYear(); int month = dt.getMonthOfYear(); int hours = dt.getHourOfDay(); int minutes = dt.getMinuteOfHour(); 

For example code using Joda-Time to translate between time zones, see my answer on the question Java Convert GMT/UTC to Local time doesn’t work as expected

14 Answers 14

Date is always UTC-based. or time-zone neutral, depending on how you want to view it. A Date only represents a point in time; it is independent of time zone, just a number of milliseconds since the Unix epoch. There’s no notion of a «local instance of Date .» Use Date in conjunction with Calendar and/or TimeZone.getDefault() to use a «local» time zone. Use TimeZone.getTimeZone(«Europe/Madrid») to get the Madrid time zone.

. or use Joda Time, which tends to make the whole thing clearer, IMO. In Joda Time you’d use a DateTime value, which is an instant in time in a particular calendar system and time zone.

In Java 8 you’d use java.time.ZonedDateTime , which is the Java 8 equivalent of Joda Time’s DateTime .

It is just a template for copy-paste, based on your answer. You said that Date is always UTC-based . I need local time.

Читайте также:  and

@user3132194: That’s a terrible template to copy and paste. There’s no benefit over new Date() . If you want a local time, you shouldn’t use Date . If you think your code does something useful over new Date() , I suspect you’ve misunderstood.

You are right new Date() , java.util.Calendar.getInstance(java.util.TimeZone.getDefault()).getTime() and even java.util.Calendar.getInstance(java.util.TimeZone.getTimeZone(«Europe/Madrid»)).getTime() works the same. But then unfortunately your answer is wrong. Or could you show me a good template? It seems only Jesper answer is correct.

As Jon Skeet already said, java.util.Date does not have a time zone. A Date object represents a number of milliseconds since January 1, 1970, 12:00 AM, UTC. It does not contain time zone information.

When you format a Date object into a string, for example by using SimpleDateFormat , then you can set the time zone on the DateFormat object to let it know in which time zone you want to display the date and time:

Date date = new Date(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // Use Madrid's time zone to format the date in df.setTimeZone(TimeZone.getTimeZone("Europe/Madrid")); System.out.println("Date and time in Madrid: " + df.format(date)); 

If you want the local time zone of the computer that your program is running on, use:

df.setTimeZone(TimeZone.getDefault()); 

@mmm What I wrote is that specifically a java.util.Date object does not contain timezone information. That does not mean that Java in general doesn’t know about time zones — indeed it does, as you’ve discovered. The example you linked to just prints the time zones that Java knows, this has nothing to do specifically with class java.util.Date . The example doesn’t even use that class at all.

I was just saying that TimeZone.getTimeZone(«») takes a String, and there was no evidence prior to the link that the passed string you supplied is valid as Java df.setTimezone will not cause an error according to documentation.

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid")); Date currentDate = calendar.getTime(); 

you’re right, I’m looking for a timezone sheet for handling daylight savings (I was not sure about -2)

Читайте также:  Css input отключить подсветку

please read the stackoverflow FAQ at stackoverflow.com/faq: «No question is too trivial or too «newbie». Oh yes, and it should be about programming.»

The FAQ is correct. If someone Googles any programming question, we’d like Stack Overflow to be the top search result (or very near to it). This means that even the most trivial question, if it does not already exist on SO, is fair game.

Even if you set a time zone for a calendar instance it won’t be considered for the getTime() method. From its javadocs: Returns a Date object representing this Calendar’s time value (millisecond offset from the Epoch»).

With the java.time classes built into Java 8 and later:

public static void main(String[] args) < LocalDateTime localNow = LocalDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId()); System.out.println(localNow); // Prints current time of given zone without zone information : 2016-04-28T15:41:17.611 ZonedDateTime zoneNow = ZonedDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId()); System.out.println(zoneNow); // Prints current time of given zone with zone information : 2016-04-28T15:41:17.627+02:00[Europe/Madrid] >

You would use JodaTime for that. Java.util.Date is very limited regarding TimeZone.

java.util.Date is deliberately divorced from TimeZone. For simple «what is the time in a particular time zone» java.util.* isn’t too bad. but I agree that Joda Time is simply a better API in general.

Check this may be helpful. Works fine for me. Code also covered daylight savings

 TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai"); Calendar cal = Calendar.getInstance(); // If needed in hours rather than milliseconds int LocalOffSethrs = (int) ((cal.getTimeZone().getRawOffset()) *(2.77777778 /10000000)); int ChinaOffSethrs = (int) ((tz.getRawOffset()) *(2.77777778 /10000000)); int dts = cal.getTimeZone().getDSTSavings(); System.out.println("Local Time Zone : " + cal.getTimeZone().getDisplayName()); System.out.println("Local Day Light Time Saving : " + dts); System.out.println("China Time : " + tz.getRawOffset()); System.out.println("Local Offset Time from GMT: " + LocalOffSethrs); System.out.println("China Offset Time from GMT: " + ChinaOffSethrs); // Adjust to GMT cal.add(Calendar.MILLISECOND,-(cal.getTimeZone().getRawOffset())); // Adjust to Daylight Savings cal.add(Calendar.MILLISECOND, - cal.getTimeZone().getDSTSavings()); // Adjust to Offset cal.add(Calendar.MILLISECOND, tz.getRawOffset()); Date dt = new Date(cal.getTimeInMillis()); System.out.println("After adjusting offset Acctual China Time :" + dt); 

Источник

Оцените статью