Data Type Java

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