come puoi combinare data e ora sql in un'unica data e ora in Java? [duplicare]
Utilizzando Java Calendar come puoi combinare la data di inizio, il giorno e l'ora di inizio?
Per esempio:
Se la data di inizio è 9/8/2020. Il giorno è 2 e l'ora di inizio è 8:00 AM, allora come possiamo ottenere una data java che sia 9/9/2020 8:00 AM. Ecco il mio tentativo fallito.
def startDateTime(Date startDate, int day, java.sql.Time startTime){
def date
date = Calendar.getInstance()
date.setTime(startDate)
//adding day. since day 1 is the first day we need to add day - 1
date.add(Calendar.DATE, day - 1)
// setting the time from startTime
date.setTimeInMillis(startTime.getTime())
return date.getTime()
}
Grazie per l'aiuto.
Risposte
Stai chiamando date.setTime(startDate)e date.setTimeInMillis(startTime.getTime()). Il secondo metodo sovrascrive il tempo impostato nel primo metodo. Dovresti creare 2 istanze separate di Calendar.
Ecco come puoi ottenerlo
- Crea
Calendaristanze separate perstartDayestartTime - Costruisci un nuovo
Calendaroggetto daCalendaroggetti separati creati in # 1 e aggiungidaysecondo i requisiti
Ecco il codice completo:
import java.sql.Time;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
public class ProofOfConcept {
public static void main(String[] args) {
int day = 2;
Time startTime = new Time(1, 1, 1);
Calendar timeCalendar = Calendar.getInstance();
timeCalendar.setTime(startTime);
Date startDate = new Date();
Calendar startDateCalendar = Calendar.getInstance();
startDateCalendar.setTime(startDate);
/* Only java 8 and above
LocalDateTime localDateTime = LocalDateTime.of(startDateCalendar.get(Calendar.YEAR), startDateCalendar.get(Calendar.MONTH) + 1, startDateCalendar.get(Calendar.DAY_OF_MONTH),
timeCalendar.get(Calendar.HOUR), timeCalendar.get(Calendar.MINUTE), timeCalendar.get(Calendar.SECOND));
localDateTime = localDateTime.plusDays(day);
System.out.println("localDateTime : " + localDateTime);
Date dateFromLocalDateTime = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.println("dateFromLocalDateTime : " + dateFromLocalDateTime);*/
Calendar result = Calendar.getInstance();
result.set(startDateCalendar.get(Calendar.YEAR), startDateCalendar.get(Calendar.MONTH), startDateCalendar.get(Calendar.DAY_OF_MONTH) + 2,
timeCalendar.get(Calendar.HOUR), timeCalendar.get(Calendar.MINUTE), timeCalendar.get(Calendar.SECOND));
Date date = result.getTime();
System.out.println("date : " + date);
}
}
Produzione:
data: Tue Sep 08 01:01:01 IST 2020
Nota: suggerisco di utilizzare java.time.*pacchetti over java.util.*. Perché? Controlla questo . Ma questo è disponibile solo in java 8. (Tuttavia, puoi usare joda time nelle versioni precedenti alla 8).
Modifica: spostamento del commento di Ole VV alla risposta.
Per Java 7, suggerisco di utilizzare java.timela moderna API di data e ora Java, tramite il backport, ThreeTen Backport .
static LocalDateTime startDateTime(Date startDate, int day, java.sql.Time startTime) {
LocalTime startLocalTime = DateTimeUtils.toLocalTime(startTime);
return DateTimeUtils.toInstant(startDate)
.atZone(ZoneId.systemDefault())
.toLocalDate()
.plusDays(day - 1)
.atTime(startLocalTime);
}