Mega Code Archive

 
Categories / Java / Data Type
 

PackUnpacks date stored in kdb format

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;   } }