Skip to content

Add BinaryHandler for SimpleDateFormat #235

Description

@zdenek-jonas

Add BinaryHandler for SimpleDateFormat
This could be useful for user.

Sample code:

package test.microstream.various.text;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.eclipse.store.storage.embedded.types.EmbeddedStorage;
import org.eclipse.store.storage.embedded.types.EmbeddedStorageManager;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

public class SimpleDateFormatTest
{
    @TempDir
    Path tempDir;


    @Test
    void simpleDateFormatAsFieldInDataClass()
    {
        SimpleDateFormat fmt = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH);
        Date sample = new Date(1610000000000L);

        SdfData root = new SdfData(fmt);
        try (EmbeddedStorageManager storageManager = EmbeddedStorage.start(root, tempDir)) {
            storageManager.storeRoot();
        }

        SdfData loadedRoot = new SdfData();
        try (EmbeddedStorageManager storageManager = EmbeddedStorage.start(loadedRoot, tempDir)) {
            assertEquals(fmt.format(sample), loadedRoot.getFormat().format(sample));
        }
    }

    private static class SdfData
    {
        private SimpleDateFormat format;

        public SdfData(SimpleDateFormat format)
        {
            this.format = format;
        }

        public SdfData()
        {
        }

        public SimpleDateFormat getFormat()
        {
            return format;
        }

        public void setFormat(SimpleDateFormat format)
        {
            this.format = format;
        }
    }
}

ends with:

java.lang.NullPointerException: Cannot invoke "sun.util.calendar.BaseCalendar$Date.hit(long)" because "gdate" is null

	at java.base/sun.util.calendar.BaseCalendar.getCalendarDateFromFixedDate(BaseCalendar.java:432)
	at java.base/java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2378)
	at java.base/java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2293)
	at java.base/java.util.Calendar.setTimeInMillis(Calendar.java:1832)
	at java.base/java.util.Calendar.setTime(Calendar.java:1798)
	at java.base/java.text.SimpleDateFormat.format(SimpleDateFormat.java:988)
	at java.base/java.text.SimpleDateFormat.format(SimpleDateFormat.java:981)
	at java.base/java.text.DateFormat.format(DateFormat.java:402)
	at test.microstream.various.text.SimpleDateFormatTest.simpleDateFormatAsFieldInDataClass(SimpleDateFormatTest.java:34)
	at java.base/java.lang.reflect.Method.invoke(Method.java:565)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions