Java tutorial
import java.util.Calendar; import java.util.Date; public class Util { /** * Unpacks date stored in kdb format. * * @param d * @return */ public static Date unpackDate(byte[] d) { // Byte bits: 00000000 11111111 22222222 33333333 44444444 // Contents : 00YYYYYY YYYYYYMM MMDDDDDH HHHHMMMM MMSSSSSS int year = (d[0] << 6) | ((d[1] >> 2) & 0x0000003F); int month = ((d[1] & 0x00000003) << 2) | ((d[2] >> 6) & 0x00000003); int day = (d[2] >> 1) & 0x0000001F; int hour = ((d[2] & 0x00000001) << 4) | ((d[3] >> 4) & 0x0000000F); int minute = ((d[3] & 0x0000000F) << 2) | ((d[4] >> 6) & 0x00000003); int second = d[4] & 0x0000003F; Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, day, hour, minute, second); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } public static byte[] packDate(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); // Byte bits: 00000000 11111111 22222222 33333333 44444444 // Contents : 00YYYYYY YYYYYYMM MMDDDDDH HHHHMMMM MMSSSSSS byte[] bytes = new byte[5]; int s = c.get(Calendar.SECOND); int m = c.get(Calendar.MINUTE); int h = c.get(Calendar.HOUR_OF_DAY); int d = c.get(Calendar.DATE); int mm = c.get(Calendar.MONTH) + 1; int y = c.get(Calendar.YEAR); bytes[4] = (byte) ((m << 6) | s); bytes[3] = (byte) ((m >> 2) | (h << 4)); bytes[2] = (byte) ((h >> 4) | (d << 1) | (mm << 6)); bytes[1] = (byte) ((mm >> 2) | (y << 2)); bytes[0] = (byte) (y >> 6); return bytes; } }