Converteer String naar Datum in Java

1. Overzicht

In deze tutorial we zullen verschillende manieren onderzoeken om te converteren Draad objecten in Datum voorwerpen. We beginnen met het nieuwe Datum Tijd API - java.time dat werd geïntroduceerd in Java 8 voordat we naar het oude keken java.util.Date gegevenstype dat ook wordt gebruikt voor het weergeven van datums.

Om te eindigen zullen we ook kijken naar enkele externe bibliotheken voor conversie met Joda-Time en de Apache Commons Lang DateUtils klasse.

2. Converteren Draad naar LocalDate of LocalDateTime

LocalDate en LocalDateTime zijn onveranderlijke datum-tijdobjecten die een datum vertegenwoordigen en later een datum en tijd. Standaard hebben Java-datums de ISO-8601-indeling, dus als we een tekenreeks hebben die een datum en tijd in deze indeling vertegenwoordigt, dan we kunnen de ontleden () API van deze klassen rechtstreeks.

Hier is wat meer informatie over deze nieuwe API.

2.1. De ... gebruiken Ontleden API

D e Date-Time API biedt ontleden () methoden voor het ontleden van een Draad die datum- en tijdinformatie bevat. Om String-objecten te converteren naar LocalDate en LocalDateTime objecten, de Draad moet een geldige datum of tijd vertegenwoordigen volgens ISO_LOCAL_DATE of ISO_LOCAL_DATE_TIME.

Anders een DateTimeParseException zal tijdens runtime worden gegooid.

Laten we in ons eerste voorbeeld een Draad naar een java.time.LocalDate:

LocalDate date = LocalDate.parse ("2018-05-05");

Een vergelijkbare benadering als het bovenstaande kan worden gebruikt om een Draad naar een java.time.LocalDateTime:

LocalDateTime dateTime = LocalDateTime.parse ("2018-05-05T11: 50: 55");

Het is belangrijk op te merken dat zowel de LocalDate en LocalDateTime objecten zijn tijdzone-agnostisch. Echter, wanneer we te maken hebben met tijdzonespecifieke datum en tijden, kunnen we de ZonedDateTimeontleden methode om rechtstreeks een tijdzone-specifieke datum en tijd te krijgen:

ZonedDateTime zonedDateTime = ZonedDateTime.parse ("2015-05-05T10: 15: 30 + 01: 00 [Europa / Parijs]");

Laten we nu eens kijken hoe we tekenreeksen met een aangepast formaat converteren.

2.2. De ... gebruiken Ontleden API met een aangepaste formatter

Omzetten van een Draad met een aangepaste datumnotatie in een Datum object is een wijdverbreide bewerking in Java.

Voor dit doeleinde, we zullen de DateTimeFormatter klasse die talrijke voorgedefinieerde formatters biedt, en stelt ons in staat om een ​​formatter te definiëren.

Laten we beginnen met een voorbeeld van het gebruik van een van de voorgedefinieerde formatters van DateTimeFormatter:

String dateInString = "19590709"; LocalDate date = LocalDate.parse (dateInString, DateTimeFormatter.BASIC_ISO_DATE);

Laten we in het volgende voorbeeld een opmaak maken die de indeling "EEE, MMM d jjjj" toepast. Dit formaat specificeert drie tekens voor de volledige dagnaam van de week, één cijfer voor de dag van de maand, drie tekens voor de maand en vier cijfers voor het jaar.

Deze formatter herkent tekenreeksen zoals "Vr, 3 jan. 2003 “of‘ wo, 23 mrt. 1994“:

String dateInString = "ma, 05 mei 1980"; DateTimeFormatter-formatter = DateTimeFormatter.ofPattern ("EEE, d MMM jjjj", Locale.ENGLISH); LocalDate dateTime = LocalDate.parse (dateInString, formatter);

2.3. Algemene datum- en tijdpatronen

Laten we eens kijken naar enkele veelvoorkomende datum- en tijdpatronen:

  • y - Jaar (1996; 96)
  • M - Maand in jaar (juli; juli; 07)
  • d - Dag in maand (1-31)
  • E. - Dagnaam in week (vrijdag, zondag)
  • een AM / PM marker (AM, PM)
  • H. - Uur in dag (0-23)
  • h - Uur in am / pm (1-12)
  • m - Minuut in uur (0-60)
  • s - Tweede in minuut (0-60)

Voor een volledige lijst met symbolen die we kunnen gebruiken om een ​​patroon te specificeren voor het parseren, klik hier.

Als we moeten converteren java.time data in de oudere java.util.Date object, lees dit artikel voor meer details.

3. Omzetten Draad naar java.util.Date

Vóór Java 8 werd het Java-datum- en tijdmechanisme geleverd door de oude API's van java.util.Date, java.util.Calendar, en java.util.TimeZone klassen waar we soms nog mee moeten werken.

Laten we eens kijken hoe we een string kunnen omzetten in een java.util.Date voorwerp:

SimpleDateFormat formatter = nieuwe SimpleDateFormat ("dd-MMM-jjjj", Locale.ENGLISH); String dateInString = "7-jun-2013"; Datum datum = formatter.parse (dateInString);

In het bovenstaande voorbeeld we moeten eerst een SimpleDateFormat voorwerp door het patroon door te geven dat de datum- en tijdnotatie beschrijft.

Vervolgens moeten we de ontleden () methode die de datum doorgeeft Draad. Als het Draad doorgegeven argument heeft niet hetzelfde formaat als het patroon dan een ParseException zal worden gegooid.

3.1. Tijdzone-informatie toevoegen aan java.util.Date

Het is belangrijk op te merken dat de java.util.Date heeft geen concept van tijdzone, en vertegenwoordigt alleen het aantal seconden dat is verstreken sinds het Unix-tijdperk - 1970-01-01T00: 00: 00Z.

Maar als we het Datum object rechtstreeks wordt afgedrukt, wordt het altijd afgedrukt met de standaardtijdzone van het Java-systeem.

In dit laatste voorbeeld bekijken we hoe een datum moet worden opgemaakt door tijdzonegegevens toe te voegen:

SimpleDateFormat formatter = nieuwe SimpleDateFormat ("dd-M-jjjj uu: mm: ss a", Locale.ENGLISH); formatter.setTimeZone (TimeZone.getTimeZone ("America / New_York")); String dateInString = "22-01-2015 10:15:55 AM"; Datum datum = formatter.parse (dateInString); String formattedDateString = formatter.format (datum);

We kunnen de JVM-tijdzone ook programmatisch wijzigen, maar dit wordt niet aanbevolen:

TimeZone.setDefault (TimeZone.getTimeZone ("GMT"));

4. Externe bibliotheken

Nu we een goed begrip hebben van hoe we moeten converteren Draad bezwaar tegen Datum objecten die de nieuwe en oude API's gebruiken die door core Java worden aangeboden, laten we eens kijken naar enkele externe bibliotheken.

4.1. Joda-Time-bibliotheek

Een alternatief voor de kern Java Datum en Tijd bibliotheek is Joda-Time. Hoewel de auteurs gebruikers nu aanbevelen om te migreren naar java.time (JSR-310) als dit niet mogelijk is, dan is de De Joda-Time-bibliotheek biedt een uitstekend alternatief voor het werken met datum en tijd. Deze bibliotheek biedt vrijwel alle mogelijkheden die worden ondersteund in Java 8 Datum Tijd project.

Het artefact is te vinden op Maven Central:

 joda-tijd joda-tijd 2.10 

Hier is een kort voorbeeld van werken met de standaard Datum Tijd:

DateTimeFormatter-formatter = DateTimeFormat.forPattern ("dd / MM / jjjj UU: mm: ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, formatter);

Laten we ook een voorbeeld bekijken van het expliciet instellen van een tijdzone:

DateTimeFormatter formatter = DateTimeFormat.forPattern ("dd / MM / jjjj HH: mm: ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, formatter); DateTime dateTimeWithZone = dateTime.withZone (DateTimeZone.forID ("Azië / Kolkata"));

4.2. Apache Commons Lang - DateUtils

De DateUtils klasse biedt veel handige hulpprogramma's die het gemakkelijker maken om met de erfenis te werken Kalender en Datum voorwerpen.

Het commons-lang3-artefact is verkrijgbaar bij Maven Central:

 org.apache.commons commons-lang3 3.7 

Laten we een datum converteren Draad met behulp van een Array van datumpatronen in een java.util.Date:

String dateInString = "07 / 06-2013"; Date date = DateUtils.parseDate (dateInString, nieuwe String [] {"jjjj-MM-dd UU: mm: ss", "dd / MM-jjjj"});

5. Conclusie

In dit artikel hebben we verschillende manieren geïllustreerd om strings naar verschillende soorten Datum objecten (met en zonder tijd), zowel in gewoon Java als in externe bibliotheken.

De volledige broncode van het artikel is beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found