Skill

Gson এর মাধ্যমে কাস্টম Date Format সেট করা

Date এবং Time Object হ্যান্ডল করা - জিসন (Gson) - Java Technologies

368

Gson লাইব্রেরি ব্যবহার করে আপনি Date বা Time টাইপের মানের জন্য কাস্টম Date Format সেট করতে পারেন। Gson ডিফল্টভাবে ISO 8601 ফরম্যাটে Date সেভ এবং প্যার্স করে, তবে কখনও কখনও আপনি যদি নির্দিষ্ট কাস্টম ফরম্যাট ব্যবহার করতে চান, তখন GsonBuilder এর setDateFormat() বা registerTypeAdapter() পদ্ধতি ব্যবহার করতে পারেন।

এখানে Date টাইপের জন্য কাস্টম ফরম্যাট সেট করার বিভিন্ন পদ্ধতি দেখানো হলো।


১. GsonBuilder এর মাধ্যমে কাস্টম Date Format সেট করা**

আপনি GsonBuilder এর setDateFormat() পদ্ধতি ব্যবহার করে একটি কাস্টম Date ফরম্যাট সেট করতে পারেন। এটি SimpleDateFormat ব্যবহার করে নির্দিষ্ট ফরম্যাটে Date-কে সিরিয়ালাইজ এবং ডিসেরিয়ালাইজ করতে সাহায্য করবে।

উদাহরণ ১: GsonBuilder.setDateFormat() ব্যবহার করা

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", new Date());

        Gson gson = new GsonBuilder()
                        .setDateFormat("yyyy-MM-dd HH:mm:ss")  // Set custom date format
                        .create();

        String json = gson.toJson(person);
        System.out.println(json);  // Output: {"name":"John","birthDate":"2024-12-19 15:30:00"}
    }
}

class Person {
    String name;
    Date birthDate;

    public Person(String name, Date birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }
}

এখানে, "yyyy-MM-dd HH:mm:ss" ফরম্যাটে birthDate-কে JSON এ সিরিয়ালাইজ করা হয়েছে।

setDateFormat() পদ্ধতি Gson-এ যেকোনো Date টাইপের ফিল্ডের জন্য ডিফল্ট ফরম্যাট হিসেবে কাজ করবে।


২. Custom Date Serializer এবং Deserializer ব্যবহার করা

যদি আপনি আরও কাস্টমাইজড ফরম্যাট চান, তাহলে TypeAdapter বা JsonSerializerJsonDeserializer ব্যবহার করতে পারেন। এতে আপনি কাস্টম সিরিয়ালাইজার এবং ডেসেরিয়ালাইজার তৈরি করতে পারবেন।

উদাহরণ ২: Custom Date Serializer এবং Deserializer

import com.google.gson.*;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", new Date());

        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Date.class, new CustomDateSerializer())  // Register custom serializer
                        .registerTypeAdapter(Date.class, new CustomDateDeserializer())  // Register custom deserializer
                        .create();

        String json = gson.toJson(person);
        System.out.println(json);  // Output: {"name":"John","birthDate":"19-Dec-2024"}
        
        // Deserialize from custom format
        String jsonInput = "{\"name\":\"John\", \"birthDate\":\"19-Dec-2024\"}";
        Person deserializedPerson = gson.fromJson(jsonInput, Person.class);
        System.out.println(deserializedPerson.birthDate);  // Output: Fri Dec 19 00:00:00 UTC 2024
    }
}

class Person {
    String name;
    Date birthDate;

    public Person(String name, Date birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }
}

// Custom Date Serializer
class CustomDateSerializer implements JsonSerializer<Date> {
    @Override
    public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
        return new JsonPrimitive(sdf.format(src));
    }
}

// Custom Date Deserializer
class CustomDateDeserializer implements JsonDeserializer<Date> {
    @Override
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        String dateStr = json.getAsString();
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
        try {
            return sdf.parse(dateStr);
        } catch (Exception e) {
            throw new JsonParseException("Unable to parse date: " + dateStr, e);
        }
    }
}

এই উদাহরণে:

  1. CustomDateSerializer সিরিয়ালাইজেশন প্রক্রিয়ায় Date-কে "dd-MMM-yyyy" ফরম্যাটে কনভার্ট করে।
  2. CustomDateDeserializer ডেসেরিয়ালাইজেশন প্রক্রিয়ায় "dd-MMM-yyyy" ফরম্যাটে JSON থেকে Date অবজেক্টে কনভার্ট করে।

৩. Custom Date Format-এ Timezone ব্যবহার করা

কখনো কখনো আপনি যদি Timezone এর জন্য কাস্টম ফরম্যাট চান, তাহলে SimpleDateFormat এ টাইমজোনও সেট করতে পারেন।

উদাহরণ ৩: Date Format সহ Timezone

import com.google.gson.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", new Date());

        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Date.class, new CustomDateWithTimezoneSerializer())  // Register custom serializer
                        .create();

        String json = gson.toJson(person);
        System.out.println(json);  // Output: {"name":"John","birthDate":"2024-12-19 15:30:00 UTC"}
    }
}

class Person {
    String name;
    Date birthDate;

    public Person(String name, Date birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }
}

// Custom Date Serializer with TimeZone
class CustomDateWithTimezoneSerializer implements JsonSerializer<Date> {
    @Override
    public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));  // Set UTC Timezone
        return new JsonPrimitive(sdf.format(src));
    }
}

এখানে, UTC Timezone ব্যবহার করা হয়েছে, এবং "yyyy-MM-dd HH:mm:ss z" ফরম্যাটে Date সিরিয়ালাইজ করা হয়েছে।


Gson-এ Date টাইপের জন্য কাস্টম ফরম্যাট সেট করার বিভিন্ন পদ্ধতি রয়েছে:

  1. GsonBuilder.setDateFormat() ব্যবহার করে সহজেই কাস্টম ফরম্যাট সেট করা যায়।
  2. Custom Serializer এবং Deserializer ব্যবহার করে আরও কাস্টমাইজড ফরম্যাটে Date টাইপ হ্যান্ডল করা যায়।
  3. আপনি Timezone সহ ফরম্যাট সেট করতে চান, তাও সম্ভব।

এটি JSON ডেটা সিরিয়ালাইজ এবং ডেসেরিয়ালাইজ করার সময় খুবই কার্যকরী এবং নমনীয়ভাবে কাজ করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...