marketing-analytics/predicting/ml-data-windowing-pipeline/transform/DateUtil.java (32 lines of code) (raw):

// Copyright 2019 Google LLC // // Licensed 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 com.google.corp.gtech.ads.datacatalyst.components.mldatawindowingpipeline.transform; import java.time.Duration; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import org.joda.time.Instant; /** * Utility class for parsing command line date strings into Instants. */ final class DateUtil { private DateUtil() { } // Returns the given dateString in dd/MM/yyyy format as an Instant. private static Instant parseDateStringToInstantOrDie(String dateString) { try { return new Instant( 1000 * LocalDate.parse(dateString, DateTimeFormatter.ofPattern("dd/MM/yyyy")).toEpochDay() * Duration.ofDays(1).getSeconds()); } catch (Exception e) { throw new RuntimeException(e); } } // Returns the given stateDateString in dd/MM/yyyy format as an Instant. If the input is null or // empty, returns the Epoch Instant. Dies if the input is invalid. public static Instant parseStartDateStringToInstant(String stateDateString) { Instant startInstant = new Instant(0); if (stateDateString != null && !stateDateString.isEmpty()) { startInstant = parseDateStringToInstantOrDie(stateDateString); } return startInstant; } // Returns the given endDateString in dd/MM/yyyy format as an Instant. If the input is null or // empty, returns the maximum possible Instant. Dies if the input is invalid. public static Instant parseEndDateStringToInstant(String endDateString) { Instant endInstant = new Instant(Long.MAX_VALUE); if (endDateString != null && !endDateString.isEmpty()) { endInstant = parseDateStringToInstantOrDie(endDateString); } return endInstant; } }