Gson-এ Date এবং Time অবজেক্টের Serialization এবং Deserialization প্রক্রিয়া কাস্টমাইজ করা যেতে পারে। Gson স্বাভাবিকভাবে Date টাইপ অবজেক্টগুলো JSON এ timestamp (milliseconds since epoch) ফরম্যাটে রূপান্তর করে, কিন্তু আপনি চাইলে কাস্টম Date ফরম্যাট (যেমন yyyy-MM-dd HH:mm:ss) ব্যবহার করতে পারেন।
এখানে আমরা Gson-এর মাধ্যমে Date এবং Time অবজেক্টের কাস্টম Serialization এবং Deserialization করার পদ্ধতি দেখব।
1. Date Object Serialization এবং Deserialization
1.1 Gson Default Behavior (Date as Timestamp)
Gson ডিফল্টভাবে Date অবজেক্টগুলোকে milliseconds since epoch হিসেবে Serialize এবং Deserialize করে।
উদাহরণ:
import com.google.gson.Gson;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// একটি Date অবজেক্ট তৈরি করা
Date now = new Date();
// Gson দিয়ে Serialize করা
Gson gson = new Gson();
String json = gson.toJson(now);
System.out.println("Serialized Date (Timestamp): " + json);
// JSON থেকে Date অবজেক্টে Deserialize করা
Date deserializedDate = gson.fromJson(json, Date.class);
System.out.println("Deserialized Date: " + deserializedDate);
}
}
আউটপুট:
Serialized Date (Timestamp): 1639792286464
Deserialized Date: Thu Dec 16 17:58:06 IST 2024
2. Custom Date Format Serialization and Deserialization
আপনি চাইলে একটি নির্দিষ্ট Date ফরম্যাটে (যেমন yyyy-MM-dd HH:mm:ss) Date অবজেক্ট Serialize এবং Deserialize করতে পারেন। এর জন্য Gson-এ SimpleDateFormat ব্যবহার করা হয় এবং কাস্টম Serializer এবং Deserializer তৈরি করা হয়।
2.1 Custom Date Format Serializer এবং Deserializer
import com.google.gson.*;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;
class DateSerializer implements JsonSerializer<Date> {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(dateFormat.format(date));
}
}
class DateDeserializer implements JsonDeserializer<Date> {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
return dateFormat.parse(json.getAsString());
} catch (Exception e) {
throw new JsonParseException("Invalid date format", e);
}
}
}
public class Main {
public static void main(String[] args) {
// একটি Date অবজেক্ট তৈরি করা
Date now = new Date();
// Gson Builder এর মাধ্যমে কাস্টম Serializer এবং Deserializer ব্যবহার করা
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new DateSerializer()) // Custom Serializer
.registerTypeAdapter(Date.class, new DateDeserializer()) // Custom Deserializer
.create();
// Serialize করা
String json = gson.toJson(now);
System.out.println("Serialized Date with custom format: " + json);
// Deserialize করা
Date deserializedDate = gson.fromJson(json, Date.class);
System.out.println("Deserialized Date: " + deserializedDate);
}
}
আউটপুট:
Serialized Date with custom format: "2024-12-19 14:34:45"
Deserialized Date: Thu Dec 19 14:34:45 IST 2024
3. Date Format এবং Time Zone কাস্টমাইজেশন
আপনি চাইলে SimpleDateFormat এর সাথে Time Zone এবং Locale সেটও করতে পারেন। এর ফলে Date ফরম্যাটটি নির্দিষ্ট টাইমজোনের ভিত্তিতে কনভার্ট হবে।
import java.text.SimpleDateFormat;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) {
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Time Zone সেট করা
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
String formattedDate = sdf.format(now);
System.out.println("Formatted Date (GMT): " + formattedDate);
}
}
4. LocalDate, LocalTime এবং LocalDateTime Serialization এবং Deserialization
Java 8 থেকে java.time প্যাকেজে LocalDate, LocalTime, এবং LocalDateTime টাইপগুলো পরিচিত। Gson এই টাইপগুলোকে ডিফল্টভাবে সাপোর্ট করে না, তবে আপনি কাস্টম Serializer এবং Deserializer ব্যবহার করে এগুলোর Serialization এবং Deserialization করতে পারেন।
4.1 Example for LocalDate and LocalDateTime
import com.google.gson.*;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
class LocalDateSerializer implements JsonSerializer<LocalDate> {
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Override
public JsonElement serialize(LocalDate localDate, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(localDate.format(formatter));
}
}
class LocalDateTimeSerializer implements JsonSerializer<LocalDateTime> {
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public JsonElement serialize(LocalDateTime localDateTime, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(localDateTime.format(formatter));
}
}
public class Main {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = LocalDateTime.now();
Gson gson = new GsonBuilder()
.registerTypeAdapter(LocalDate.class, new LocalDateSerializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer())
.create();
// Serialize LocalDate and LocalDateTime
String jsonDate = gson.toJson(localDate);
String jsonDateTime = gson.toJson(localDateTime);
System.out.println("Serialized LocalDate: " + jsonDate);
System.out.println("Serialized LocalDateTime: " + jsonDateTime);
}
}
আউটপুট:
Serialized LocalDate: "2024-12-19"
Serialized LocalDateTime: "2024-12-19 14:35:45"
সারাংশ
- Date Serialization এবং Deserialization: Gson ডিফল্টভাবে
Dateঅবজেক্টকে timestamp (milliseconds) হিসেবে Serialize করে, তবে আপনি চাইলে কাস্টম ফরম্যাট ব্যবহার করে তার DateSerializer এবং DateDeserializer তৈরি করতে পারেন। - Java 8 Date and Time API (LocalDate, LocalDateTime): Gson এই টাইপগুলো সাপোর্ট করে না, তবে কাস্টম Serializer/Deserializer তৈরি করে এগুলোর জন্য কাস্টম Serialization এবং Deserialization করা সম্ভব।
- Time Zone কাস্টমাইজেশন:
SimpleDateFormatব্যবহার করে আপনি টাইমজোন কাস্টমাইজ করতে পারেন।
এভাবে আপনি Gson-এ Date এবং Time অবজেক্টের Serialization এবং Deserialization কাস্টমাইজ করতে পারেন।
Read more