Files
redkale/src/main/java/org/redkale/convert/ext/LocalDateSimpledCoder.java
2022-12-28 22:43:34 +08:00

75 lines
2.4 KiB
Java

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redkale.convert.ext;
import java.time.LocalDate;
import org.redkale.convert.*;
import org.redkale.convert.json.*;
/**
* java.time.LocalDate 的SimpledCoder实现
*
* <p>
* 详情见: https://redkale.org
*
* @author zhangjx
* @param <R> Reader输入的子类型
* @param <W> Writer输出的子类型
*/
public final class LocalDateSimpledCoder<R extends Reader, W extends Writer> extends SimpledCoder<R, W, LocalDate> {
public static final LocalDateSimpledCoder instance = new LocalDateSimpledCoder();
@Override
public void convertTo(W out, LocalDate value) {
out.writeInt(value == null ? -1 : value.getYear() * 100_00 + value.getMonthValue() * 100 + value.getDayOfMonth());
}
@Override
public LocalDate convertFrom(R in) {
int t = in.readInt();
return t == -1 ? null : LocalDate.of(t / 100_00, t % 100_00 / 100, t % 100);
}
// public static void main(String[] args) throws Throwable {
// LocalDate now = LocalDate.now();
// System.out.println(now);
// BsonWriter writer = new BsonWriter();
// LocalDateSimpledCoder.instance.convertTo(writer, now);
// System.out.println(new ByteArray(writer).getInt(0));
// BsonReader reader = new BsonReader(writer.toArray());
// System.out.println(LocalDateSimpledCoder.instance.convertFrom(reader));
// }
/**
* java.time.LocalDate 的JsonSimpledCoder实现
*
* @param <R> Reader输入的子类型
* @param <W> Writer输出的子类型
*/
public final static class LocalDateJsonSimpledCoder<R extends JsonReader, W extends JsonWriter> extends SimpledCoder<R, W, LocalDate> {
public static final LocalDateJsonSimpledCoder instance = new LocalDateJsonSimpledCoder();
@Override
public void convertTo(final W out, final LocalDate value) {
if (value == null) {
out.writeNull();
} else {
out.writeSmallString(value.toString());
}
}
@Override
public LocalDate convertFrom(R in) {
final String str = in.readSmallString();
if (str == null) {
return null;
}
return LocalDate.parse(str);
}
}
}