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

JavaTimezoneJodatime

Java Problem Overview


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());

e.g.

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();

Java Solutions


Solution 1 - Java

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.

Solution 2 - Java

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());

Solution 3 - Java

using Calendar is simple:

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

Solution 4 - Java

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]
	}

Solution 5 - Java

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

Solution 6 - Java

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);	

Solution 7 - Java

I couldn't get it to work using Calendar. You have to use DateFormat

//Wednesday, July 20, 2011 3:54:44 PM PDT
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateTimeString = df.format(new Date());

//Wednesday, July 20, 2011
df = DateFormat.getDateInstance(DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateString = df.format(new Date());

//3:54:44 PM PDT
df = DateFormat.getTimeInstance(DateFormat.FULL);
df.setTimeZone(Timezone.getTimeZone("PST"));
final String timeString = df.format(new Date());

Solution 8 - Java

java.time

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

Also, quoted below is a notice from the home page of Joda-Time:

> Note that from Java SE 8 onwards, users are asked to migrate to java.time (JSR-310) - a core part of the JDK which replaces this project.

Solution using java.time, the modern Date-Time API: If you want to get just date and time (and not the timezone information), you can use LocalDateTime.#now(ZoneId).

The non-parametrized overloaded, LocalDateTime.#now returns the current Date-Time using the JVM's timezone. It is equivalent to using LocalDateTime.now(ZoneId.systemDefault()).

Demo:

import java.time.LocalDateTime;
import java.time.ZoneId;

public class Main {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now(ZoneId.of("Europe/Madrid"));
        System.out.println(now);
    }
}

Output from a sample run:

2021-07-25T15:54:31.574424

ONLINE DEMO

If you want to get the date and time along with the timezone information, you can use ZonedDateTime.#now(ZoneId). It's non-parametrized variant behave in the same manner as described above.

Demo:

import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Madrid"));
        System.out.println(now);
    }
}

Output from a sample run:

2021-07-25T16:08:54.741773+02:00[Europe/Madrid]

ONLINE DEMO

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.

Solution 9 - Java

You can try ZonedDateTime.now() . You can find it in package java.time

import java.time.ZonedDateTime;

public class Temp {
public static void main(String args[]) {
    System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Madrid")));
}

}

Output (I'm based in kolkata,India):

2021-09-17T14:46:14.341+02:00[Europe/Madrid]

Solution 10 - Java

To get date and time of your zone.

Date date = new Date();
DateFormat df = new SimpleDateFormat("MM/dd/YYYY HH:mm a");
df.setTimeZone(TimeZone.getDefault());
df.format(date);

Solution 11 - Java

To get the date to a variable .

public static  String  getCurrentDate(){
    final ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));
    String Temporal= DateTimeFormatter.ofPattern("yyyy-MM-dd").format(now);
    String today= LocalDate.now().format(DateTimeFormatter.ofPattern(Temporal));
    return today;
}

Solution 12 - Java

Here are some steps for finding Time for your zone:

Date now = new Date();

 DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");  
 df.setTimeZone(TimeZone.getTimeZone("Europe/London"));  
    
 System.out.println("timeZone.......-->>>>>>"+df.format(now));  

Solution 13 - Java

Date in 24 hrs format

Output:14/02/2020 19:56:49 PM

 Date date = new Date();
 DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss aa");
 dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/London"));
 System.out.println("date is: "+dateFormat.format(date));

Date in 12 hrs format

Output:14/02/2020 07:57:11 PM

 Date date = new Date();`enter code here`
 DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss aa");
 dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/London"));
 System.out.println("date is: "+dateFormat.format(date));

Solution 14 - Java

DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateTimeString = df.format(new Date());

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSergio del AmoView Question on Stackoverflow
Solution 1 - JavaJon SkeetView Answer on Stackoverflow
Solution 2 - JavaJesperView Answer on Stackoverflow
Solution 3 - JavadfaView Answer on Stackoverflow
Solution 4 - JavaZeeshanView Answer on Stackoverflow
Solution 5 - JavaJoshua PartogiView Answer on Stackoverflow
Solution 6 - JavaSubhamayView Answer on Stackoverflow
Solution 7 - JavawjinView Answer on Stackoverflow
Solution 8 - JavaArvind Kumar AvinashView Answer on Stackoverflow
Solution 9 - JavaBabluView Answer on Stackoverflow
Solution 10 - JavaUmer KhalidView Answer on Stackoverflow
Solution 11 - JavaSameera De SilvaView Answer on Stackoverflow
Solution 12 - JavashanView Answer on Stackoverflow
Solution 13 - JavaSivaView Answer on Stackoverflow
Solution 14 - JavashamimView Answer on Stackoverflow