All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.opdar.gulosity.serializable.DateTime2Serializable Maven / Gradle / Ivy

package com.opdar.gulosity.serializable;

import com.opdar.gulosity.utils.BufferUtils;

import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;

/**
 * Created by Shey on 2016/8/27.
 */
public class DateTime2Serializable extends JavaSerializable {
    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

    public DateTime2Serializable(int type) {
        super(type);
    }

    @Override
    public String getValue(int meta, ByteBuffer buffer) {
        long intpart = BufferUtils.readBELog(buffer, 5) - 0x8000000000L; // big-endian
        int frac = 0;
        switch (meta) {
            case 0:
                frac = 0;
                break;
            case 1:
            case 2:
                frac = buffer.get() * 10000;
                break;
            case 3:
            case 4:
                frac = (int) (BufferUtils.readBELog(buffer, 2) * 100);
                break;
            case 5:
            case 6:
                frac = (int) BufferUtils.readBELog(buffer, 3);
                break;
            default:
                frac = 0;
                break;
        }

        String second = null;
        if (intpart == 0) {
            second = "0000-00-00 00:00:00";
        } else {
            long ymd = intpart >> 17;
            long ym = ymd >> 5;
            long hms = intpart % (1 << 17);
            second = String.format("%04d-%02d-%02d %02d:%02d:%02d",
                    (int) (ym / 13),
                    (int) (ym % 13),
                    (int) (ymd % (1 << 5)),
                    (int) (hms >> 12),
                    (int) ((hms >> 6) % (1 << 6)),
                    (int) (hms % (1 << 6)));
        }

        if (meta >= 1) {

            String sec = String.valueOf(frac);

            if (sec.length() < 6) {
                StringBuilder result = new StringBuilder(6);
                int len = 6 - sec.length();
                for (; len > 0; len--) {
                    result.append('0');
                }
                result.append(sec);
                sec = result.toString();
            }

            String microSecond = sec.substring(0, meta);
            return second + '.' + microSecond;
        } else {
            return second;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy