Tengo este objeto date:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());

valor de d1 es Fri Jan 07 17:40:00 PKT 2011

Ahora estoy tratando de agregar 10 minutos a la fecha anterior.

Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());

Valor de newTime cambios a 2011-50-07 17:50
pero debe ser 07-01-2011 17:50.

Añade minutos correctamente, pero también los cambios de mes, no sé por qué!

InformationsquelleAutor junaidp | 2012-01-28

11 Comentarios

  1. 181

    El problema para usted es que usted está utilizando mm. Usted debe utilizar MM. MM es para el mes y mm es para los minutos. Pruebe con yyyy-MM-dd HH:mm

    Otro enfoque:

    Puede ser tan simple como esto (otra opción es usar joda-el tiempo)

    static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs
    
    Calendar date = Calendar.getInstance();
    long t= date.getTimeInMillis();
    Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));
    • puede que el caballero que votaron cuidado de explicar por qué?
    • gracias , he probado este , la fecha está llegando correctamente , pero cuando intento cambiar de cadena , me da el mismo resultado incorrecto de la Cadena de newTime= df.formato(afterAddingTenMins); me da 2011-50-07 17:50 , tengo que convertir en Cadena, alguna sugerencia
    • utiliza el último bit de código, pero se omite la antigua parte de la solución?
    • gracias , este mm y MM cosa resolver el problema
    • Yo votada abajo porque su respuesta inicial fue totalmente fuera con su pregunta.
  2. 45

    puede utilizar DateUtils clase en la org.apache.commons.lang3.paquete de tiempo de

    int addMinuteTime = 5;
    Date targetTime = new Date(); //now
    targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute
    • Para la gente que trata con la versión anterior de DateUtils, su presente en el paquete -> org.apache.commons.lang.time.DateUtils
  3. 32

    Conveniencia método para la aplicación de @Pangea respuesta:

    /*
    *  Convenience method to add a specified number of minutes to a Date object
    *  From: http://stackoverflow.com/questions/9043981/how-to-add-minutes-to-my-date
    *  @param  minutes  The number of minutes to add
    *  @param  beforeTime  The time that will have minutes added to it
    *  @return  A date object with the specified number of minutes added to it 
    */
    private static Date addMinutesToDate(int minutes, Date beforeTime){
        final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs
    
        long curTimeInMs = beforeTime.getTime();
        Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS));
        return afterAddingMins;
    }
    • Esto fue más fácil
  4. 18

    Con el fin de evitar cualquier dependencia puede utilizar java.util.Calendario como sigue:

        Calendar now = Calendar.getInstance();
        now.add(Calendar.MINUTE, 10);
        Date teenMinutesFromNow = now.getTime();

    En Java 8 tenemos una nueva API:

        LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES));
        Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
  5. 16

    Este es incorrectamente especificado:

    SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");

    Estás usando en minutos en lugar de en el mes (MM)

    • Yo estaba citando el interrogador del código.
  6. 5

    tl;dr

    LocalDateTime.parse( 
        "2016-01-23 12:34".replace( " " , "T" )
    )
    .atZone( ZoneId.of( "Asia/Karachi" ) )
    .plusMinutes( 10 )

    java.tiempo

    Utilizar el excelente java.clases de tiempo para la fecha de tiempo de trabajo. Estas clases suplantar la problemática de edad de fecha y hora de las clases, tales como java.util.Date y java.util.Calendar.

    ISO 8601

    El java.clases de tiempo de uso estándar ISO 8601 formatos por defecto para análisis/generación de cadenas de fecha y hora valores. Para hacer su cadena de entrada cumplir, sustituir el ESPACIO en el medio con una T.

    String input = "2016-01-23 12:34" ;
    String inputModified = input.replace( " " , "T" );

    LocalDateTime

    Analizar su cadena de entrada como un LocalDateTime ya que carece de cualquier tipo de información sobre la zona horaria o el desplazamiento de UTC.

    LocalDateTime ldt = LocalDateTime.parse( inputModified );

    Agregar diez minutos.

    LocalDateTime ldtLater = ldt.plusMinutes( 10 );

    ldt.toString(): 2016-01-23T12:34

    ldtLater.toString(): 2016-01-23T12:44

    Ver de código en vivo en IdeOne.com.

    Que LocalDateTime no tiene zona horaria, por lo que no no representar un punto en la línea de tiempo. Aplique una zona horaria a traducir en un momento real. Especificar un en el tiempo apropiado, el nombre de la zona en el formato de continent/region, tales como America/Montreal, Africa/Casablanca, o Pacific/Auckland, o Asia/Karachi. No utilice nunca el 3-4 letra de la abreviatura como EST o IST o PKT como son no verdadero zonas de tiempo, no estandarizado, y ni siquiera único(!).

    ZonedDateTime

    Si usted sabe la intención de zona horaria para este valor, se aplicará una ZoneId para obtener una ZonedDateTime.

    ZoneId z = ZoneId.of( "Asia/Karachi" );
    ZonedDateTime zdt = ldt.atZone( z );

    zdt.toString(): 2016-01-23T12:44+05:00[región de Asia/Karachi]

    Anomalías

    Pensar en la posibilidad de agregar esos diez minutos antes o después de la adición de una zona horaria. Usted puede obtener un resultado diferente porque de anomalías, tales como Horario de verano (DST) que cambio el hora del reloj de pared.

    Si debe agregar el 10 minutos antes o después de la adición de la zona depende del significado de su situación de negocio y reglas.

    Sugerencia: Cuando se tiene la intención de un momento específico en la línea de tiempo, siempre mantener la información de zona horaria. No perder esa información, como se realiza con los datos de entrada. Es el valor 12:34 destinado a ser mediodía en Pakistán o en el mediodía de Francia o del mediodía en Québec? Si nos referimos al mediodía, en Pakistán, digamos así, mediante la inclusión de al menos el desplazamiento de UTC (+05:00), y mejor aún, el nombre de la zona horaria (Asia/Karachi).

    Instant

    Si quieres el mismo momento, como visto a través de la lente de UTC, el extracto de una Instant. El Instant clase representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos (hasta nueve (9) dígitos de una fracción decimal).

    Instant instant = zdt.toInstant();

    Convertir

    Evitar la problemática de edad fecha y la hora de clases, siempre que sea posible. Pero si usted debe, usted puede convertir. Llame a los nuevos métodos añadidos a la edad, las clases.

    java.util.Date utilDate = java.util.Date.from( instant );

    Acerca de java.tiempo

    La java.tiempo marco está construido en Java 8 y versiones posteriores. Estas clases suplantar la problemática de edad legado fecha y hora de las clases, tales como java.util.Fecha, Calendario, & SimpleDateFormat.

    La Joda-El Tiempo proyecto, ahora en el modo de mantenimiento, asesora de la migración a java.tiempo.

    Para obtener más información, consulte la Oracle Tutorial. Y la búsqueda de Desbordamiento de Pila, hay muchos ejemplos y explicaciones. La especificación es JSR 310.

    Dónde obtener el java.clases de tiempo?

    • Java SE 8 y que SE 9 y más tarde
      • Incorporado.
      • Parte de la norma API de Java con un paquete de implementación.
      • Java 9 añade algunas características menores y correcciones.
    • Java SE 6 y que SE 7
      • Mucho de java.el tiempo es la funcionalidad de back-portado a Java 6 & 7 en ThreeTen-Backport.
    • Android

    La ThreeTen-Extra proyecto se extiende java.tiempo con clases adicionales. Este proyecto es un terreno de prueba para posibles futuras incorporaciones a java.tiempo. Usted puede encontrar algunos de clases útiles aquí como Intervalo, YearWeek, YearQuarter, y más.

    • Yo siento que esto debería estar mucho más arriba en el 2018 …
  7. 4

    Hay un error en el patrón de su SimpleDateFormat. debe ser

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  8. 4

    el uso de este formato,

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");

    mm para los minutos y MM para mounth

  9. 2

    Una vez que tengas la fecha analizada, yo uso esta función de utilidad de agregar horas, minutos o segundos:

    public class DateTimeUtils {
        private static final long ONE_HOUR_IN_MS = 3600000;
        private static final long ONE_MIN_IN_MS = 60000;
        private static final long ONE_SEC_IN_MS = 1000;
    
        public static Date sumTimeToDate(Date date, int hours, int mins, int secs) {
            long hoursToAddInMs = hours * ONE_HOUR_IN_MS;
            long minsToAddInMs = mins * ONE_MIN_IN_MS;
            long secsToAddInMs = secs * ONE_SEC_IN_MS;
            return new Date(date.getTime() + hoursToAddInMs + minsToAddInMs + secsToAddInMs);
        }
    }

    Tener cuidado cuando la adición de largos períodos de tiempo, 1 día no es siempre de 24 horas (de ahorro con luz diurna de tipo de ajustes, salto segundos y así sucesivamente), Calendario se recomienda para que.

  10. 0

    Trabajo para mí DateUtils

    //import
    import org.apache.commons.lang.time.DateUtils

            //Added and removed minutes to increase current range dates
            Date horaInicialCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaInicial.getTime()),-1)
            Date horaFinalCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaFinal.getTime()),1)
  11. -2

    Sólo para alguien que está interesado. Yo estaba trabajando en una versión de iOS proyecto que requiere una funcionalidad similar, así que terminó portar la respuesta por @jeznag a swift

    private func addMinutesToDate(minutes: Int, beforeDate: NSDate) -> NSDate {
        var SIXTY_SECONDS = 60
    
        var m = (Double) (minutes * SIXTY_SECONDS)
        var c =  beforeDate.timeIntervalSince1970  + m
        var newDate = NSDate(timeIntervalSince1970: c)
    
        return newDate
    }
    • Fecha de Swift ya había parecido a construir-en función, por ejemplo la Fecha(timeInterval: desde: )

Dejar respuesta

Please enter your comment!
Please enter your name here