Java SimpleDateFormat Timezone offset with minute separated by colon
You can get the timezone offset formatted like +01:00
with the SimpleDateFormat in Java 7 (yyyy-MM-dd'T'HH:mm:ss.SSSXXX
), or with the Joda's DateTimeFormat (yyyy-MM-dd'T'HH:mm:ss.SSSZZ
).
Java SimpleDateFormat for time zone with a colon separator?
JodaTime's DateTimeFormat
to rescue:
String dateString = "2010-03-01T00:00:00-08:00";
String pattern = "yyyy-MM-dd'T'HH:mm:ssZ";
DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern);
DateTime dateTime = dtf.parseDateTime(dateString);
System.out.println(dateTime); // 2010-03-01T04:00:00.000-04:00
(time and timezone difference in toString()
is just because I'm at GMT-4 and didn't set locale explicitly)
If you want to end up with java.util.Date
just use DateTime#toDate()
:
Date date = dateTime.toDate();
Wait for JDK7 (JSR-310) JSR-310, the referrence implementation is called ThreeTen (hopefully it will make it into Java 8) if you want a better formatter in the standard Java SE API. The current SimpleDateFormat
indeed doesn't eat the colon in the timezone notation.
Update: as per the update, you apparently don't need the timezone. This should work with SimpleDateFormat
. Just omit it (the Z
) in the pattern.
String dateString = "2010-03-01T00:00:00-08:00";
String pattern = "yyyy-MM-dd'T'HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = sdf.parse(dateString);
System.out.println(date); // Mon Mar 01 00:00:00 BOT 2010
(which is correct as per my timezone)
Is there a way to using date format's offset parameter with colon?
What you are talking about is not a time zone (like UTC), it is an offset (like +01:00).
You can use the modern date time API java.time
, which has a built-in DateTimeFormatter.ISO_OFFSET_DATE_TIME
, that formats the offset as desired:
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class StackoverflowDemo {
public static void main(String[] args) {
OffsetDateTime odt = OffsetDateTime.now();
System.out.println(odt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
}
}
The output on my system is this:
2019-11-15T11:30:46.532+01:00
Java date offset format issue?
You can use this format
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Have a look at the doc for more info.
P.S:- As my friend @Thomas mentioned, this will work only with Java 7 and above.
Unparsable Date with colon-separated timezone
Starting from Java7, to handle +02:00, you can use the following format:
"yyyy-MM-dd'T'hh:mm:ssXXX"
This can be seen in the SimpleDateFormat documentation
SimpleDateFormat question for timezone offset +AA:BB
I confirm that this is not a Pi issue. I switched my local time zone to UTC and ran the following example:
long current = System.currentTimeMillis();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss,SSSXXX");
Date date = new Date(current);
String parsed = format.format(date);
System.out.println(parsed);
2020-08-31T15:05:27,872Z
And the Z appeared, on Windows 10. I have missed that part of the ISO spec. It seems I have to workaround my tests for this situation :). Thanks everyone!
Related Topics
Stopping a Window from Displaying Till It Is Fully Drawn
Printing in Java to Label Printer
Sessions in Struts2 Application
How to Prevent Java.Lang.String.Split() from Creating a Leading Empty String
How to Convert Date in to Yyyy-Mm-Dd Format
How to Execute Multiple SQL Statements from Java
When Should We Use a Preparedstatement Instead of a Statement
Transform Java Future into a Completablefuture
How to Handle Simultaneous Key Presses in Java
Last Row Always Removed from Defaulttablemodel, Regardless of Index
How to Check for a Valid Url in Java
How to Get the Real Path of Java Application at Runtime
Difference Between List and Array
How to Change the Size of the Font of a Jlabel to Take the Maximum Size