code: public static ZonalOffset atLongitude(BigDecimal longitude) {
  
          if (
              (longitude.compareTo(DECIMAL_POS_180) > 0)
              || (longitude.compareTo(DECIMAL_NEG_180) < 0)
          ) {
              throw new IllegalArgumentException("Out of range: " + longitude);
          }
  
          BigDecimal offset = longitude.multiply(DECIMAL_240);
          BigDecimal integral = offset.setScale(0, RoundingMode.DOWN);
          BigDecimal delta = offset.subtract(integral);
          BigDecimal decimal = delta.setScale(9, RoundingMode.HALF_UP).multiply(MRD);
  
          int total = integral.intValueExact();
          int fraction = decimal.intValueExact();
  
          if (fraction == 0) {
              return ZonalOffset.ofTotalSeconds(total);
          } else if (fraction == 1_000_000_000) {
              return ZonalOffset.ofTotalSeconds(total + 1);
          } else if (fraction == -1_000_000_000) {
              return ZonalOffset.ofTotalSeconds(total - 1);
          } else {
              return new ZonalOffset(total, fraction);
          }
  
      }
docs: /*[deutsch]
  <p>Konstruiert eine neue Verschiebung auf Basis einer geographischen
  L&auml;ngenangabe. </p>
  
  <p>Hinweis: Fraktionale Verschiebungen werden im Zeitzonenkontext
  nicht verwendet, sondern nur dann, wenn ein {@code PlainTimestamp}
  zu einem {@code Moment} oder zur&uuml;ck konvertiert wird. </p>
  
  @param   longitude   geographical longitude in degrees defined in
  range {@code -180.0 <= longitude <= 180.0}
  @return  zonal offset in decimal precision
  @throws  IllegalArgumentException if range check fails