I am working on a REST API integration class and it is passing a field called effectiveDate as part of the response. However, the data in the field is not consistent. Sometimes, it is passing the value as '1985-01-01 00:00:00.000' (UTC format) and sometimes it is passing the value as '1985-01-01T00:00:00' (ISO 8601 format). In my Response class, I have defined this field as shown below.
public String effectiveDate {get; set;}
In the apex class, I am trying to populate this date on the Asset object. Below is my code.
Datetime effectiveDt = Datetime.parse(wsResponse.effectiveDate); //Statement throwing exception
template.effectiveDate = Date.newInstance(effectiveDt.yearGmt(), effectiveDt.monthGmt(), effectiveDt.dayGmt());
However, my statement with the Datetime.parse is throwing the following exception.
07:40:24:715 FATAL_ERROR System.TypeException: Invalid date/time: 1985-12-01T00:00:00
How can I modify my statement to accept the Datetime irrespective of whether it is coming in UTC format or ISO8601 format?
EDIT: I have tried the following piece of code in execute anonymous window and I am getting the error message as [Line: 15, Column: 1 System.JSONException: Invalid format: "2019-01-01 11:50:55" is malformed at " 11:50:55"].
EDIT: Changed the month and date in the below dates.
String strDate1 = '2017-12-17T11:50:50.000Z';
String strDate2 = '2016-11-16 11:50:55';
Datetime date1 = (Datetime)JSON.deserialize('"' + strDate1 + '"',Datetime.class);
Datetime date2 = (Datetime)JSON.deserialize('"' + strDate2 + '"',Datetime.class);
System.debug('date 1 = ' + date1);
System.debug('date 2 = ' + date2); Date.newInstance(date1.yearGmt(),date1.monthGmt(),date1.dayGmt()));
System.debug('Date 2 = ' + Date.newInstance(date2.yearGmt(),date2.monthGmt(),date2.dayGmt()));
Output of debug log:
17:54:48:005 USER_DEBUG [7]|DEBUG|date 1 = 2017-01-01 00:00:00
17:54:48:005 USER_DEBUG [8]|DEBUG|date 2 = 2016-01-01 00:00:00
17:54:48:006 USER_DEBUG [9]|DEBUG|Date 1 = 2017-01-01 00:00:00
17:54:48:006 USER_DEBUG [10]|DEBUG|Date 2 = 2016-01-01 00:00:00
As you can see, the month and day are always coming as 01 instead of 12 and 11 that we are passing.
Any ideas?