A.J
A.J

Reputation: 1180

Change date from MM/dd to yyyy-MM-dd'T'HH:mm:ss.SSZ in Java

I have a String that formatted MM/dd. I would like to convert it to a Date in format yyyy-MM-dd'T'HH:mm:ss.SSZ.

DateFormat df = new SimpleDateFormat("MM/dd");
String strDate = "06/05";
Date date = new Date();
date = df.parse(strDate);

This makes it a Date, but in the original format.

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSZ").format(date));

This returns the correct month and day, but nopthing else.

1970-06-05T00:00:00.00-0400

Any idea how I can make it return

CURRENT_YEAR-06-05TCURRENT_TIME

Upvotes: 0

Views: 5208

Answers (5)

Ridwan Bhugaloo
Ridwan Bhugaloo

Reputation: 241

String strDate = "06-05";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-"+strDate+"'T'HH:mm:ss.SSZ");
System.out.println(sdf.format(new Date()));

the output:

2020-06-05T23:00:45.306+0400

Upvotes: 0

Andreas
Andreas

Reputation: 159215

In the question, the date format pattern indicates a desire for 2-digit fractional seconds. SimpleDateFormat cannot do that.

The newer Java 8 Time API can, and you should be using that anyway.

If you're running on Java 6 or 7, get the ThreeTen-Backport library.

To parse a MM/dd formatted string and get a full timestamp with current year and time-of-day, in the default time zone, use the following code:

String strDate = "06/05";
MonthDay monthDay = MonthDay.parse(strDate, DateTimeFormatter.ofPattern("MM/dd"));
ZonedDateTime date = ZonedDateTime.now().with(monthDay);
System.out.println(date.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSZ")));

Sample Output

2020-06-05T14:52:48.45-0400

Upvotes: 3

Cromax
Cromax

Reputation: 2052

I recommend to make use of java.time package. There you go:

var ds = "01/12";
var df = java.time.format.DateTimeFormatter.ofPattern("MM/dd");
var dt = java.time.MonthDay.from(df.parse(ds)).adjustInto(java.time.LocalDateTime.now());

Then you can convert dt to java.util.Date or whatever you like. Or simply use one of java.time formaters to get the desired output.

Upvotes: 2

Ali Ben Zarrouk
Ali Ben Zarrouk

Reputation: 2018

For something this simple I suggest a different approach, get current time then set month and day from the original string THEN format.

String str = "08/09";
        String[] split = str.split("/");

        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.MONTH, Integer.parseInt(split[0]));
        calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(split[1]));
        System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(calendar.getTime()));

Upvotes: 1

BlackPanter
BlackPanter

Reputation: 17

You are creating a date with only month and day If you want to use the current year and time, you can create a calendar object and edit the month and day

Upvotes: 1

Related Questions