/*
* Copyright 2010, 2011 Christopher Pheby
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jadira.usertype.dateandtime.joda.columnmapper;
import org.jadira.usertype.spi.shared.AbstractStringColumnMapper;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormatterBuilder;
import org.joda.time.format.ISODateTimeFormat;
public class StringColumnLocalDateTimeMapper extends AbstractStringColumnMapper<LocalDateTime> {
private static final long serialVersionUID = -6885561256539185520L;
public static final DateTimeFormatter LOCAL_DATETIME_PARSER = ISODateTimeFormat.localDateOptionalTimeParser();
private static final DateTimeFormatter DATE_TIME_PRINTER_PREFIX = new DateTimeFormatterBuilder()
.append(ISODateTimeFormat.yearMonth()).appendLiteral("-")
.toFormatter();
public static final DateTimeFormatter LOCAL_TIME_PRINTER = ISODateTimeFormat.hourMinuteSecond();
public static final DateTimeFormatter LOCAL_MILLIS_PRINTER = DateTimeFormat.forPattern("SSS");
@Override
public LocalDateTime fromNonNullValue(String s) {
return LOCAL_DATETIME_PARSER.parseDateTime(s).toLocalDateTime();
}
@Override
public String toNonNullValue(LocalDateTime value) {
String date = DATE_TIME_PRINTER_PREFIX.print(value);
int dayOfMonth = value.getDayOfMonth();
if (dayOfMonth < 10) {
date = date + "0";
}
date = date + dayOfMonth;
String millis = LOCAL_MILLIS_PRINTER.print(value);
while (millis.length() > 1 && millis.endsWith("0")) {
millis = millis.substring(0, millis.length() - 1);
}
String formatted = date + "T" + LOCAL_TIME_PRINTER.print(value) + "." + millis;
return formatted;
}
}