code: @Override public void updateTime(final ZonedDateTime TIME) {
          if (dateText.isVisible()) {
              dateText.setText(DATE_TEXT_FORMATTER.format(TIME));
              Helper.adjustTextSize(dateText, 0.6 * size, size * 0.08);
              dateText.relocate((size - dateText.getLayoutBounds().getWidth()) * 0.5, size * 0.22180451);
          }
  
          hour.setText(HOUR_FORMATTER.format(TIME));
          Helper.adjustTextSize(hour, 0.6 * size, 0.6 * size);
          hour.relocate((size - hour.getLayoutBounds().getWidth()) * 0.5, (size - hour.getLayoutBounds().getHeight()) * 0.65);
  
          minute.setText(MINUTE_FORMATTER.format(TIME));
          Helper.adjustTextSize(minute, 0.1 * size, 0.075 * size);
          if (minuteAngle.get() == -1) moveMinute(6 * TIME.getMinute());
          KeyValue kv1 = new KeyValue(minuteAngle, minuteAngle.get());
          KeyValue kv2 = new KeyValue(minuteAngle, 6 * TIME.getMinute());
          KeyFrame kf1 = new KeyFrame(Duration.ZERO, kv1);
          KeyFrame kf2 = new KeyFrame(Duration.millis(100), kv2);
          timeline.getKeyFrames().setAll(kf1, kf2);
          timeline.play();
  
          if (secondBackgroundCircle.isVisible()) {
              secondArc.setLength((-6 * TIME.getSecond()));
              if (clock.isDiscreteSeconds()) {
                  secondArc.setLength((-6 * TIME.getSecond()));
              } else {
                  secondArc.setLength((-6 * TIME.getSecond() - TIME.get(ChronoField.MILLI_OF_SECOND) * 0.006));
              }
          }
      }
docs: ******************** Graphics ******************************************