All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ma.vi.base.util.Dates Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2018 Vikash Madhow
 */

package ma.vi.base.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Utility functions to work with dates.
 *
 * @author [email protected]
 */
public class Dates {
  /**
   * Given year, return a date for the first day of the first month at 00:00:00.
   */
  public static Date of(int year) {
    return of(year, 1, 1, 0, 0, 0, 0);
  }

  public static Date of(int year, int month) {
    return of(year, month, 1, 0, 0, 0, 0);
  }

  public static Date of(int year, int month, int day) {
    return of(year, month, day, 0, 0, 0, 0);
  }

  public static Date of(int year, int month, int day, int hour) {
    return of(year, month, day, hour, 0, 0, 0);
  }

  public static Date of(int year, int month, int day, int hour, int minute) {
    return of(year, month, day, hour, minute, 0, 0);
  }

  public static Date of(int year, int month, int day, int hour, int minute, int second) {
    return of(year, month, day, hour, minute, second, 0);
  }

  public static Date of(int year, int month, int day, int hour, int minute, int second, int milli) {
    Calendar date = Calendar.getInstance();
    date.set(Calendar.YEAR, year);
    date.set(Calendar.MONTH, month - 1);
    date.set(Calendar.DAY_OF_MONTH, day);
    date.set(Calendar.HOUR_OF_DAY, hour);
    date.set(Calendar.MINUTE, minute);
    date.set(Calendar.SECOND, second);
    date.set(Calendar.MILLISECOND, milli);
    return date.getTime();
  }

  /**
   * Converts a normal java.util.Date to a java.sql.Date.
   */
  public static java.sql.Date toSqlDate(Date date) {
    return new java.sql.Date(date.getTime());
  }

  public static Object toSqlDate(Object value) {
    if (value instanceof Date) {
      return toSqlDate((Date) value);
    } else {
      return value;
    }
  }

  /**
   * Returns the date as a proper SQL literal for embedding in a query.
   * The literal is already enclosed in single-quotes.
   */
  public static String toSqlDateLiteral(Date date) {
    if (date == null) {
      return "NULL";
    } else {
      return '\'' + ISO_8601_DATE_FORMAT.format(date) + '\'';
    }
  }

  public static String toSqlDateLiteral() {
    return toSqlDateLiteral(new Date());
  }

  /**
   * Given a Java date formatting string, returns the equivalent
   * postgresql formatter string for the most common patterns. This
   * method does not cover all possible patterns.
   */
  public static String javaToPostgresqlDateFormat(String javaFormat) {
    String format = javaFormat.replace('y', 'Y');
    format = format.replaceAll("M{4,}", "Month");
    format = format.replace("MMM", "Mon");
    format = format.replaceAll("D+", "DDD");
    format = format.replaceAll("E{4,}", "Day");
    format = format.replaceAll("E+", "Dy");
    format = format.replaceAll("d+", "DD");

    format = format.replace("HH", "HH24");
    format = format.replace("hh", "HH12");
    format = format.replace("mm", "MI");
    format = format.replace("ss", "SS");
    format = format.replace("SSS", "MS");

    format = format.replace("z", "tz");
    format = format.replace("Z", "TZ");

    return format;
  }

  /**
   * Given an Excel date formatting string, returns the equivalent
   * Java formatter string for the most common patterns. This
   * method does not cover all possible patterns.
   */
  public static String excelToJavaDateFormat(String excelFormat) {
    String format = excelFormat.replace('y', 'Y');
    format = format.replaceAll("(?
   * 
  • If year is negative it is multiplied by -1.
  • * *
  • If the year is less than 100, century is added: either 2000 if the * year is less or equal to the current year (w/o century) or 1999 * otherwise.
  • * *
  • If the year is of between 200 and 209, a 0 is added after the '2' * to make it into 2000 to 2009.
  • * *
  • If the year is of between 20000 and 20099, a 0 is removed after * the '2' to make it into 2000 to 2009.
  • * * * @param year The year to correct. * @return The corrected year. */ public static int correctYear(int year) { // make into positive if (year < 0) { year *= -1; } // add correct century: 1900 or 2000 to make it into the current or a past year if (year < 100) { int currentYear = Calendar.getInstance().get(Calendar.YEAR); year += year + 2000 > currentYear ? 1900 : 2000; } // add 0 to correct mistyping at 2nd position if (year >= 200 && year <= 299) { year += 1800; } // remove 0 to correct mistyping at 2nd position if (year >= 20000 && year <= 20099) { year -= 18000; } return year; } /** * ISO-8601 format yyyy-MM-dd which is recommended literal date format for SQL. */ public static final SimpleDateFormat ISO_8601_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); }




    © 2015 - 2025 Weber Informatics LLC | Privacy Policy