code: private static void encode(
          byte[] data,
          int pointer,
          double timestamp
      ) {
  
          // UT1-Mikrosekunden konstruieren
          long ut1 = convert(timestamp);
          boolean before2036 = (ut1 + OFFSET_2036 < 0);
          long micros;
  
          if (before2036) {
              micros = ut1 + OFFSET_1900;
          } else {
              micros = ut1 + OFFSET_2036; // siehe RFC 4330, Abschnitt 3
          }
  
          // Festkomma vor Bit 32, deshalb Bits nach links schieben
          long integer = micros / MIO;
          long fraction = ((micros % MIO) << 32) / MIO;
  
          if (before2036) {
              integer |= 0x80000000L; // siehe RFC 4330, Abschnitt 3
          }
  
          long ntp = ((integer << 32) | fraction);
  
          // Binäre Darstellung erzeugen
          for (int i = 7; i >= 0; i--) {
  
              data[i + pointer] = (byte) (ntp & 0xFF);
              ntp >>>= 8;
  
          }
  
          // niedrigstes Byte nur als Zufallszahl (siehe RFC 4330, Abschnitt 3)
          data[7 + pointer] = (byte) (Math.random() * BIT08);
  
      }
docs: NTP-Timestamp als byte-Array kodieren