/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package servidor.utiles;

import java.text.*;
import java.util.*;

public class Fecha {
    static final java.text.SimpleDateFormat timeFormatHM;
    static final java.text.SimpleDateFormat timeFormatHMS;
    static final java.text.SimpleDateFormat timeFormatHMSm;
    static final java.text.SimpleDateFormat dateFormatDMA;
    static final java.text.SimpleDateFormat dateFormatSQL;
    static final java.text.SimpleDateFormat dateFormatSQLCorto;
    public static final java.sql.Timestamp TimestampNulo;
    public static final java.util.Date DateNulo;
    public static final String horaNula;
    
    static {
        timeFormatHM = new java.text.SimpleDateFormat("HH:mm");
        timeFormatHMS = new java.text.SimpleDateFormat("HH:mm:ss");
        timeFormatHMSm = new java.text.SimpleDateFormat("HH:mm:ss.SSS");
        dateFormatDMA = new java.text.SimpleDateFormat("dd/MM/yyyy");
        dateFormatSQL = new java.text.SimpleDateFormat("yyyyMMdd HH:mm:ss");
        dateFormatSQLCorto = new java.text.SimpleDateFormat("yyyyMMdd");
        TimestampNulo = new java.sql.Timestamp(0);
        DateNulo = new java.util.Date(0);
        horaNula = TimestampNulo.toString();
    }
    
    public Fecha() {
    }
    
    public static java.sql.Timestamp ahora() {
        return new java.sql.Timestamp(System.currentTimeMillis());
    }
    public static java.sql.Timestamp ahoraRestada(long tiempo) {
        return new java.sql.Timestamp(System.currentTimeMillis() - tiempo);  // - Global.main.sincronizador.milisegundosDiferencia 
    }
    
    public static java.sql.Timestamp horaCorregida(java.sql.Timestamp hora) {
        return new java.sql.Timestamp(hora.getTime() - Global.main.sincronizador.milisegundosDiferencia);
    }
    
    public static String formatoHoraHM(java.util.Date d) {
        if(d== null) return "";
        return timeFormatHM.format(d);
    }
    
    public static String formatoHoraHMS(java.util.Date d) {
        if(d== null) return "";
        return timeFormatHMS.format(d);
    }
    
    public static String formatoHoraHMSm(java.util.Date d) {
        if(d== null) return "";
        return timeFormatHMSm.format(d);
    }

    public static String formatoFechaCorta(java.util.Date d) {
        if(d== null) return "";
        return dateFormatDMA.format(d);
    }
    
    public static String formatoFechaSQL(java.util.Date d) {
        if(d== null) return "''";
        return "'" + dateFormatSQL.format(d) + "'";
    }
    
    public static String formatoFechaSQLCorto(java.util.Date d) {
        if(d== null) return "''";
        return "'" + dateFormatSQLCorto.format(d) + "'";
    }
    
    public static java.util.Date parseFecha(String fechaTxt) {
        try {
            return dateFormatDMA.parse(fechaTxt);
        } catch(Exception exc) {
            return new java.util.Date(0);
        }
    }

    public static java.util.Date convertirHora(String hora){
        try {
            Format formatodiahora = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
            String fechaDia = formatoFechaCorta(new java.util.Date()) + " " + hora;
            return (java.util.Date)formatodiahora.parseObject(fechaDia);
        } catch (ParseException ex) { }
        return null;
    }

    public static java.util.Date ajusteAleatorioHora(java.util.Date hora, int minutos) {
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTime(hora);
        Random random = new Random(System.currentTimeMillis());
        int segundos = random.nextInt(minutos * 120);
        segundos -= (minutos * 60);
        gc.add(Calendar.SECOND, segundos);
        return gc.getTime();
    }
    
    public static java.sql.Timestamp arreglarParaHoy(java.sql.Timestamp t) {
       GregorianCalendar hoy = new GregorianCalendar();
       GregorianCalendar gc = new GregorianCalendar();
       gc.setTimeInMillis(t.getTime());
       gc.set(Calendar.YEAR, hoy.get(Calendar.YEAR));
       gc.set(Calendar.DAY_OF_YEAR, hoy.get(Calendar.DAY_OF_YEAR));
       t.setTime(gc.getTimeInMillis());
       return t;
    }

    public static java.util.Date addDias(java.util.Date d, int n) {
         GregorianCalendar cal = new GregorianCalendar();
         cal.setTime(d);
         cal.add(Calendar.DAY_OF_YEAR, n);
         return new java.sql.Date(cal.getTimeInMillis());
    }
}
