DayOfYearTerm.java
- /* Copyright 2024-2025 The Johns Hopkins University Applied Physics Laboratory
- * Licensed to CS GROUP (CS) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * CS licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.orekit.files.iirv.terms;
- import org.orekit.files.iirv.terms.base.LongValuedIIRVTerm;
- import org.orekit.time.AbsoluteDate;
- import org.orekit.time.DateComponents;
- import org.orekit.time.DateTimeComponents;
- import org.orekit.time.UTCScale;
- /**
- * 3-character integer representing the day of the year.
- * <p>
- * Valid values: 001-366 (365 + 1 for leap year)
- *
- * @author Nick LaFarge
- * @since 13.0
- */
- public class DayOfYearTerm extends LongValuedIIRVTerm {
- /** The length of the IIRV term within the message. */
- public static final int DAY_OF_YEAR_LENGTH = 3;
- /** Regular expression that ensures the validity of string values for this term. */
- public static final String DAY_OF_YEAR_PATTERN = "(00[1-9]|0[1-9][0-9]|[1-2][0-9]{2}|3[0-5][0-9]|36[0-6])";
- /**
- * Constructor.
- * <p>
- * See {@link LongValuedIIRVTerm#LongValuedIIRVTerm(String, String, int, boolean)}
- *
- * @param stringValue Day of the year (001-366)
- */
- public DayOfYearTerm(final String stringValue) {
- super(DAY_OF_YEAR_PATTERN, stringValue, DAY_OF_YEAR_LENGTH, false);
- }
- /**
- * Constructor.
- * <p>
- * See {@link LongValuedIIRVTerm#LongValuedIIRVTerm(String, long, int, boolean)}
- *
- * @param value Day of the year (001-366)
- */
- public DayOfYearTerm(final long value) {
- super(DAY_OF_YEAR_PATTERN, value, DAY_OF_YEAR_LENGTH, false);
- }
- /**
- * Constructs a DayOfYearTerm object from an {@link AbsoluteDate} object.
- *
- * @param absoluteDate date object from which to infer the day of year
- * @param utc UTC time scale
- */
- public DayOfYearTerm(final AbsoluteDate absoluteDate, final UTCScale utc) {
- this(fromAbsoluteDate(absoluteDate, utc));
- }
- /**
- * Constructs an IIRV DayOfYear from an {@link AbsoluteDate} object.
- *
- * @param absoluteDate date object from which to infer the day of year
- * @param utc UTC time scale
- * @return day of year associated with the inputted absolute date
- */
- private static String fromAbsoluteDate(final AbsoluteDate absoluteDate, final UTCScale utc) {
- final DateTimeComponents components = absoluteDate.getComponents(utc);
- final DateComponents date = components.getDate();
- return IIRVTermUtils.addPadding(String.valueOf(date.getDayOfYear()), '0', 3, true);
- }
- /**
- * Returns the {@link DateComponents} instance that corresponds this term's value.
- *
- * @param year year to associated with the created date components
- * @return the date components associated with this term
- */
- public DateComponents getDateComponents(final int year) {
- return new DateComponents(year, toInt());
- }
- }