Table of Contents

Convert String to LocalDate

This script converts String to LocalDate.

This is useful e.g. as a transformation script for fields "validTill" or "validFrom" of contracts when you synchronize contracts from some CSV or DB system.

Another uses may be to convert String to LocalDateTime for EAVs or synchronization tokens.

IdM 10

Java.time libraries are less tolerant when it comes to the time format. You should specify that the original String can have a different number millisecond positions (from 0 to 6 in the given example).

Script

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.format.DateTimeFormatterBuilder;
 
if (attributeValue == null) {
    return null;
}
 
DateTimeFormatter dateFormat = new DateTimeFormatterBuilder()
	.appendPattern("yyyy-MM-dd HH:mm:ss")
	.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
        .toFormatter();
 
LocalDate localDate = LocalDate.parse(attributeValue, dateFormat);
 
return localDate;

Script authorities

Service

none

Class

java.time.temporal.ChronoField
java.time.format.DateTimeFormatterBuilder

Note

If you are 100 % sure that the source system returns zero or fixed number of milliseconds to IdM, you can use the following line (the example is valid for 3 numbers of milliseconds) instead of using DateTimeFormatterBuilder in the script above.

DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");

E.g. When reading data from a PostgreSQL database and a column "timestamp without timezone", the value is returned as String with trimmed trailing 0, so you wouldn't get fixed number of milliseconds. In such case, always use the DateTimeFormatterBuilder.

LocalDateTime may be obtained in a similar way:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.format.DateTimeFormatterBuilder;
 
if (attributeValue == null) {
    return null;
}
 
DateTimeFormatter dateFormat = new DateTimeFormatterBuilder()
	.appendPattern("yyyy-MM-dd HH:mm:ss")
	.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
        .toFormatter();
 
LocalDateTime localDateTime = LocalDateTime.parse(attributeValue, dateFormat);
 
return localDateTime;

IdM 9

Script

import org.joda.time.format.DateTimeFormatter;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
 
if (!attributeValue) {
    return null;
}
 
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd.MM.yyyy");
DateTime dt = formatter.parseDateTime(attributeValue as String);
 
return dt;

Script authorities

Service

none

Class

org.joda.time.format.DateTimeFormatter
org.joda.time.format.DateTimeFormat
org.joda.time.DateTime