Zoeken…


Syntaxis

  • Date object = new Date();
  • Date object = new Date(long date);

parameters

Parameter Uitleg
Geen parameter Maakt een nieuw object Date met de toewijzingstijd (naar de dichtstbijzijnde milliseconde)
lange date Maakt een nieuw object Date met de tijd ingesteld op het aantal milliseconden sinds "het tijdperk" (1 januari 1970, 00:00:00 GMT)

Opmerkingen

Vertegenwoordiging

Intern wordt een Java Date-object weergegeven als een lange; het is het aantal milliseconden sinds een specifieke tijd (het tijdvak genoemd ). De oorspronkelijke Java Date-klasse had methoden voor het omgaan met tijdzones, enz., Maar deze werden afgeschaft ten gunste van de toen nieuwe klasse Agenda.

Dus als het enige dat u in uw code wilt doen, een specifieke tijd vertegenwoordigt, kunt u een datumklasse maken en deze opslaan, enz. Als u een voor mensen leesbare versie van die datum wilt afdrukken, maakt u echter een kalenderklasse en gebruik de opmaak om uren, minuten, seconden, dagen, tijdzones, enz. te produceren. Houd er rekening mee dat een specifieke milliseconde als verschillende uren in verschillende tijdzones wordt weergegeven; Normaal gesproken wilt u er een in de "lokale" tijdzone weergeven, maar bij de formatteermethoden moet u er rekening mee houden dat u deze misschien voor een andere wilt weergeven.

Houd er ook rekening mee dat de klokken die door JVM's worden gebruikt meestal geen milliseconde-nauwkeurigheid hebben; de klok "tikt" maar om de 10 milliseconden, en daarom kunt u, als u dingen timing, niet vertrouwen op het nauwkeurig meten van dingen op dat niveau.

Importverklaring

import java.util.Date;

De klasse Date kan worden geïmporteerd uit het pakket java.util .

Voorzichtigheid

Date gevallen zijn veranderlijk, dus het gebruik van hen kan het moeilijk maken om thread-safe code te schrijven of per ongeluk kan bieden schrijftoegang tot interne toestand. In de onderstaande klasse kan de beller bijvoorbeeld met de methode getDate() de transactiedatum wijzigen:

public final class Transaction {
  private final Date date;

  public Date getTransactionDate() {
    return date;
  }
}

De oplossing is om een kopie van het date te retourneren of de nieuwe API's te gebruiken in java.time geïntroduceerd in Java 8.

De meeste constructormethoden in de klasse Date zijn verouderd en mogen niet worden gebruikt. In bijna alle gevallen is het raadzaam om de klasse Calendar te gebruiken voor datumbewerkingen.

Java 8

Java 8 introduceert een nieuwe tijd- en datum-API in het pakket java.time , inclusief LocalDate en LocalTime . De klassen in het java.time pakket bieden een vernieuwde API die eenvoudiger te gebruiken is. Als u naar Java 8 schrijft, wordt u ten zeerste aangeraden deze nieuwe API te gebruiken. Zie Datums en tijd (java.time. *) .

Datumobjecten maken

Date date = new Date();
System.out.println(date); // Thu Feb 25 05:03:59 IST 2016

Hier bevat dit object Date de huidige datum en tijd waarop dit object is gemaakt.

Calendar calendar = Calendar.getInstance();
calendar.set(90, Calendar.DECEMBER, 11);
Date myBirthDate = calendar.getTime();
System.out.println(myBirthDate); // Mon Dec 31 00:00:00 IST 1990

Date -objecten kunnen het best gemaakt door middel van een Calendar bijvoorbeeld omdat het gebruik van de gegevens constructeurs is verouderd en ontmoedigd. Om dit te doen, moeten we een exemplaar van de klasse Calendar van de fabrieksmethode krijgen. Vervolgens kunnen we jaar, maand en dag van de maand instellen met behulp van getallen of in het geval van maanden constanten verstrekt py de kalenderklasse om de leesbaarheid te verbeteren en fouten te verminderen.

calendar.set(90, Calendar.DECEMBER, 11, 8, 32, 35);
Date myBirthDatenTime = calendar.getTime();
System.out.println(myBirthDatenTime); // Mon Dec 31 08:32:35 IST 1990

Samen met de datum kunnen we ook tijd doorgeven in de volgorde van uren, minuten en seconden.

Datumobjecten vergelijken

Kalender, datum en lokale datum

Java SE 8

before, after, CompareTo en is gelijk aan methoden

//Use of Calendar and Date objects    
final Date today = new Date();
final Calendar calendar = Calendar.getInstance();
calendar.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date birthdate = calendar.getTime();

final Calendar calendar2 = Calendar.getInstance();
calendar2.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date samebirthdate = calendar2.getTime();

//Before example
System.out.printf("Is %1$tF before %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.before(birthdate)));
System.out.printf("Is %1$tF before %1$tF? %3$b%n", today, today, Boolean.valueOf(today.before(today)));
System.out.printf("Is %2$tF before %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(birthdate.before(today)));

//After example
System.out.printf("Is %1$tF after %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.after(birthdate)));
System.out.printf("Is %1$tF after %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.after(today)));
System.out.printf("Is %2$tF after %1$tF? %3$b%n", today, birthdate, Boolean.valueOf(birthdate.after(today)));

//Compare example
System.out.printf("Compare %1$tF to %2$tF: %3$d%n", today, birthdate, Integer.valueOf(today.compareTo(birthdate)));
System.out.printf("Compare %1$tF to %1$tF: %3$d%n", today, birthdate, Integer.valueOf(today.compareTo(today)));
System.out.printf("Compare %2$tF to %1$tF: %3$d%n", today, birthdate, Integer.valueOf(birthdate.compareTo(today)));

//Equal example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", today, birthdate, Boolean.valueOf(today.equals(birthdate)));
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", birthdate, samebirthdate,
            Boolean.valueOf(birthdate.equals(samebirthdate)));
System.out.printf(
            "Because birthdate.getTime() -> %1$d is different from samebirthdate.getTime() -> %2$d, there are millisecondes!%n",
            Long.valueOf(birthdate.getTime()), Long.valueOf(samebirthdate.getTime()));

//Clear ms from calendars
calendar.clear(Calendar.MILLISECOND);
calendar2.clear(Calendar.MILLISECOND);
birthdate = calendar.getTime();
samebirthdate = calendar2.getTime();

System.out.printf("Is %1$tF equal to %2$tF after clearing ms? %3$b%n", birthdate, samebirthdate,
            Boolean.valueOf(birthdate.equals(samebirthdate)));
Java SE 8

isBefore, isAfter, CompareTo en is gelijk aan methoden

//Use of LocalDate
final LocalDate now = LocalDate.now();
final LocalDate birthdate2 = LocalDate.of(2012, 6, 30);
final LocalDate birthdate3 = LocalDate.of(2012, 6, 30);

//Hours, minutes, second and nanoOfsecond can also be configured with an other class LocalDateTime
//LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);

//isBefore example
System.out.printf("Is %1$tF before %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isBefore(birthdate2)));
System.out.printf("Is %1$tF before %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isBefore(now)));
System.out.printf("Is %2$tF before %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(birthdate2.isBefore(now)));

//isAfter example
System.out.printf("Is %1$tF after %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isAfter(birthdate2)));
System.out.printf("Is %1$tF after %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isAfter(now)));
System.out.printf("Is %2$tF after %1$tF? %3$b%n", now, birthdate2, Boolean.valueOf(birthdate2.isAfter(now)));

//compareTo example
System.out.printf("Compare %1$tF to %2$tF %3$d%n", now, birthdate2, Integer.valueOf(now.compareTo(birthdate2)));
System.out.printf("Compare %1$tF to %1$tF %3$d%n", now, birthdate2, Integer.valueOf(now.compareTo(now)));
System.out.printf("Compare %2$tF to %1$tF %3$d%n", now, birthdate2, Integer.valueOf(birthdate2.compareTo(now)));

//equals example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.equals(birthdate2)));
System.out.printf("Is %1$tF to %2$tF? %3$b%n", birthdate2, birthdate3, Boolean.valueOf(birthdate2.equals(birthdate3)));

//isEqual example
System.out.printf("Is %1$tF equal to %2$tF? %3$b%n", now, birthdate2, Boolean.valueOf(now.isEqual(birthdate2)));
System.out.printf("Is %1$tF to %2$tF? %3$b%n", birthdate2, birthdate3, Boolean.valueOf(birthdate2.isEqual(birthdate3)));

Datumvergelijking voor Java 8

Vóór Java 8 konden datums worden vergeleken met behulp van de klassen java.util.Calendar en java.util.Date . Datumklasse biedt 4 methoden om datums te vergelijken:

after , before , compareTo en equals methoden vergelijken de waarden geretourneerd door getTime () methode voor elke datum.

compareTo methode retourneert een positief geheel getal.

  • Waarde groter dan 0: wanneer de datum achter het argument Datum staat
  • Waarde groter dan 0: wanneer de datum vóór het argument Datum ligt
  • Waarde is gelijk aan 0: wanneer de datum gelijk is aan het argument Datum

equals resultaten kan verrassend zijn zoals getoond in het voorbeeld omdat waarden, zoals milliseconden, niet worden geïnitialiseerd met dezelfde waarde als ze niet expliciet worden gegeven.

Sinds Java 8

Met Java 8 is een nieuw object om met Date te werken beschikbaar java.time.LocalDate . LocalDate implementeert ChronoLocalDate , de abstracte weergave van een datum waarop de Chronology, of het kalendersysteem, kan worden ingeplugd.

Om de datum en tijd nauwkeurig te hebben, moet het object java.time.LocalDateTime worden gebruikt. LocalDate en LocalDateTime gebruiken dezelfde methodennaam voor het vergelijken.

Het vergelijken van datums met behulp van een LocalDate verschilt van het gebruik van ChronoLocalDate omdat de chronologie of het kalendersysteem niet in aanmerking worden genomen bij het eerste.

Omdat de meeste toepassingen LocalDate zouden moeten gebruiken, is ChronoLocalDate niet in voorbeelden opgenomen. Verder lezen hier .

De meeste toepassingen moeten methodehandtekeningen, velden en variabelen als LocalDate declareren, niet deze [ChronoLocalDate] -interface.

LocalDate heeft 5 methoden om datums te vergelijken:

In het geval van de parameter LocalDate is isAfter , isBefore , isEqual , is equals en vergelijk. compareTo nu deze methode:

int compareTo0(LocalDate otherDate) {
    int cmp = (year - otherDate.year);
    if (cmp == 0) {
        cmp = (month - otherDate.month);
        if (cmp == 0) {
            cmp = (day - otherDate.day);
        }
    }
    return cmp;
}

equals methode check of de parameterverwijzing eerst gelijk is aan de datum, terwijl isEqual direct vergelijkTo0 compareTo0 .

In het geval van een ander klasse-exemplaar van ChronoLocalDate de datums vergeleken met behulp van Epoch Day . De Epoch Day-telling is een eenvoudige oplopende telling van dagen waarbij dag 0 1970-01-01 (ISO) is.

Datum converteren naar een bepaalde tekenreeksindeling

format() van de klasse SimpleDateFormat helpt bij het converteren van een Date object naar een bepaald format String object met behulp van de meegeleverde patroonreeks .

Date today = new Date();
    
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yy"); //pattern is specified here
System.out.println(dateFormat.format(today)); //25-Feb-16 

Patronen kunnen opnieuw worden toegepast met applyPattern()

dateFormat.applyPattern("dd-MM-yyyy");
System.out.println(dateFormat.format(today)); //25-02-2016

dateFormat.applyPattern("dd-MM-yyyy HH:mm:ss E");
System.out.println(dateFormat.format(today)); //25-02-2016 06:14:33 Thu

Opmerking: hier geeft mm (kleine letter m) minuten aan en MM (hoofdletter M) geeft maand aan. Let goed op bij het formatteren van jaren: hoofdletter "Y" ( Y ) geeft de "week in het jaar" aan, terwijl kleine letters "y" ( y ) het jaar aangeven.

String omzetten in datum

parse() uit de klasse SimpleDateFormat helpt bij het converteren van een String naar een object Date .

DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
String dateStr = "02/25/2016"; // input String
Date date = dateFormat.parse(dateStr);
System.out.println(date.getYear()); // 116

Er zijn 4 verschillende stijlen voor de tekstindeling, SHORT , MEDIUM (dit is de standaardinstelling), LONG en FULL , die allemaal afhankelijk zijn van de landinstelling. Als er geen landinstelling is opgegeven, wordt de standaardlandinstelling van het systeem gebruikt.

Stijl Locale.US Locale.France
SHORT 6/30/09 30/06/09
MEDIUM 30 juni 2009 30 juni 2009
LANG 30 juni 2009 30 juni 2009
FULL Dinsdag 30 juni 2009 mardi 30 juni 2009

Een standaard datumuitvoer

Met de volgende code met de notatie string yyyy/MM/dd hh:mm.ss , ontvangen we de volgende uitvoer

2016/04/19 11: 45.36

// define the format to use
String formatString = "yyyy/MM/dd hh:mm.ss";

// get a current date object
Date date = Calendar.getInstance().getTime();

// create the formatter
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatString);

// format the date
String formattedDate = simpleDateFormat.format(date);

// print it
System.out.println(formattedDate);


// single-line version of all above code
System.out.println(new SimpleDateFormat("yyyy/MM/dd hh:mm.ss").format(Calendar.getInstance().getTime()));

Converteer opgemaakte tekenreeksrepresentatie van datum naar object Date

Deze methode kan worden gebruikt om een opgemaakte tekenreeksrepresentatie van een datum om te zetten in een object Date .

    /**
     * Parses the date using the given format.
     *
     * @param formattedDate the formatted date string
     * @param dateFormat the date format which was used to create the string.
     * @return the date
     */
    public static Date parseDate(String formattedDate, String dateFormat) {
        Date date = null;
        SimpleDateFormat objDf = new SimpleDateFormat(dateFormat);
        try {
          date = objDf.parse(formattedDate);
        } catch (ParseException e) {
          // Do what ever needs to be done with exception.
        }
        return date;
    }

Een specifieke datum maken

Hoewel de Java Date-klasse verschillende constructors heeft, zult u merken dat de meeste zijn verouderd. De enige acceptabele manier om een Date-instantie direct te maken, is door de lege constructor te gebruiken of lang door te geven (aantal milliseconden sinds standaard basistijd). Geen van beide is handig, tenzij u op zoek bent naar de huidige datum of een andere Date-instantie al in de hand hebt.

Als u een nieuwe datum wilt maken, hebt u een exemplaar van Agenda nodig. Van daaruit kunt u de instantie Agenda instellen op de datum die u nodig hebt.

Calendar c = Calendar.getInstance();

Dit retourneert een nieuwe agenda-instantie die is ingesteld op de huidige tijd. Agenda heeft vele methoden om de datum en tijd te wijzigen of om het volledig in te stellen. In dit geval stellen we het in op een specifieke datum.

c.set(1974, 6, 2, 8, 0, 0);
Date d = c.getTime();

De methode getTime retourneert de Date-instantie die we nodig hebben. Houd er rekening mee dat de methoden voor het instellen van de kalender alleen een of meer velden instellen, ze niet allemaal. Dat wil zeggen, als u het jaar instelt, blijven de andere velden ongewijzigd.

VALKUIL

In veel gevallen voldoet dit codefragment aan zijn doel, maar houd er rekening mee dat twee belangrijke delen van de datum / tijd niet zijn gedefinieerd.

  • de parameters (1974, 6, 2, 8, 0, 0) worden geïnterpreteerd binnen de standaardtijdzone, ergens anders gedefinieerd,
  • de milliseconden zijn niet ingesteld op nul, maar gevuld vanuit de systeemklok op het moment dat de kalenderinstantie wordt gemaakt.

Java 8 LocalDate- en LocalDateTime-objecten

Date- en LocalDate-objecten kunnen niet exact onderling worden geconverteerd, aangezien een Date-object zowel een specifieke dag als een specifieke tijd vertegenwoordigt, terwijl een LocalDate-object geen informatie over tijd of tijdzone bevat. Het kan echter handig zijn om tussen de twee te converteren als u alleen om de actuele datuminformatie geeft en niet om de tijdinformatie.

Creëert een LocalDate

// Create a default date
LocalDate lDate = LocalDate.now();

// Creates a date from values
lDate = LocalDate.of(2017, 12, 15);
    
// create a date from string
lDate = LocalDate.parse("2017-12-15");

// creates a date from zone
LocalDate.now(ZoneId.systemDefault());

Creëert een LocalDateTime

// Create a default date time
LocalDateTime lDateTime = LocalDateTime.now();

// Creates a date time from values
lDateTime = LocalDateTime.of(2017, 12, 15, 11, 30);

// create a date time from string
lDateTime = LocalDateTime.parse("2017-12-05T11:30:30");

// create a date time from zone 
LocalDateTime.now(ZoneId.systemDefault());

LocalDate tot op heden en vice versa

Date date = Date.from(Instant.now());
ZoneId defaultZoneId = ZoneId.systemDefault();

// Date to LocalDate
LocalDate localDate = date.toInstant().atZone(defaultZoneId).toLocalDate();

// LocalDate to Date
Date.from(localDate.atStartOfDay(defaultZoneId).toInstant());

LocalDateTime tot datum en vice versa

Date date = Date.from(Instant.now());
ZoneId defaultZoneId = ZoneId.systemDefault();

// Date to LocalDateTime
LocalDateTime localDateTime =  date.toInstant().atZone(defaultZoneId).toLocalDateTime();

// LocalDateTime to Date
Date out = Date.from(localDateTime.atZone(defaultZoneId).toInstant());

Tijdzones en java.util.Datum

Een java.util.Date object heeft geen concept van tijdzone.

  • Er is geen manier om een andere tijdzone instellen voor een Date
  • Er is geen manier om de tijdzone van een object Date te wijzigen
  • Een object Date dat is gemaakt met de new Date() standaardconstructor new Date() , wordt geïnitialiseerd met de huidige tijd in de standaardtijdzone van het systeem

Het is echter mogelijk om de datum weergegeven door het tijdstip dat wordt beschreven door het object Date in een andere tijdzone weer te geven met bijvoorbeeld java.text.SimpleDateFormat :

Date date = new Date();
//print default time zone
System.out.println(TimeZone.getDefault().getDisplayName());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //note: time zone not in format!
//print date in the original time zone
System.out.println(sdf.format(date));
//current time in London
sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(sdf.format(date));

Output:

Central European Time
2016-07-21 22:50:56
2016-07-21 21:50:56

Converteer java.util.Date naar java.sql.Date

java.util.Date naar java.sql.Date conversie is meestal nodig wanneer een object Date in een database moet worden geschreven.

java.sql.Date is een wrapper rond de milliseconde-waarde en wordt door JDBC gebruikt om een SQL DATE type te identificeren

In het onderstaande voorbeeld gebruiken we de constructor java.util.Date() , die een object Date maakt en dit initialiseert om de tijd tot de dichtstbijzijnde milliseconde weer te geven. Deze datum wordt gebruikt in de methode convert(java.util.Date utilDate) om een object java.sql.Date te retourneren

Voorbeeld

public class UtilToSqlConversion {
    
    public static void main(String args[])
    {
        java.util.Date utilDate = new java.util.Date();
        System.out.println("java.util.Date is : " + utilDate);
        java.sql.Date sqlDate = convert(utilDate);
        System.out.println("java.sql.Date is : " + sqlDate);
        DateFormat df = new SimpleDateFormat("dd/MM/YYYY - hh:mm:ss");
        System.out.println("dateFormated date is : " + df.format(utilDate));
    }

    private static java.sql.Date convert(java.util.Date uDate) {
        java.sql.Date sDate = new java.sql.Date(uDate.getTime());
        return sDate;
    }

}

uitgang

java.util.Date is : Fri Jul 22 14:40:35 IST 2016
java.sql.Date is : 2016-07-22
dateFormated date is : 22/07/2016 - 02:40:35

java.util.Date bevat zowel datum- als java.sql.Date , terwijl java.sql.Date alleen datuminformatie bevat

Lokale tijd

Gebruik LocalTime om alleen het tijdgedeelte van een datum te gebruiken. U kunt een LocalTime-object op verschillende manieren instantiëren

  1. LocalTime time = LocalTime.now();
  2. time = LocalTime.MIDNIGHT;
  3. time = LocalTime.NOON;
  4. time = LocalTime.of(12, 12, 45);

LocalTime ook een ingebouwde toString-methode die het formaat zeer mooi weergeeft.

System.out.println(time); 

u kunt ook uren, minuten, seconden en nanoseconden ophalen, toevoegen en aftrekken van het LocalTime-object ie

time.plusMinutes(1);
time.getMinutes();
time.minusMinutes(1);

U kunt er een Date-object van maken met de volgende code:

LocalTime lTime = LocalTime.now();
Instant instant = lTime.atDate(LocalDate.of(A_YEAR, A_MONTH, A_DAY)).
        atZone(ZoneId.systemDefault()).toInstant();
Date time = Date.from(instant);

deze klasse werkt heel mooi binnen een timerklasse om een wekker te simuleren.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow