Java >> Java tutorial >  >> Tag >> String

Formater Instant til String i Java

1. Oversigt

I dette selvstudie skal vi kaste lys over hvordan man formaterer et øjeblik til en streng i Java .

Først vil vi starte med lidt baggrund om, hvad et øjeblik er i Java. Derefter viser vi, hvordan vi besvarer vores centrale spørgsmål ved hjælp af kerne-Java og tredjepartsbiblioteker såsom Joda-Time.

2. Formatering øjeblikkelig ved hjælp af Core Java

Ifølge Java-dokumentationen er et øjeblik et målt tidsstempel fra Java-epoken 1970-01-01T00:00:00Z.

Java 8 kommer med en praktisk klasse kaldet Instant at repræsentere et specifikt øjeblikkeligt punkt på tidslinjen. Typisk kan vi bruge denne klasse til at registrere begivenhedstidsstempler i vores applikationer.

Nu hvor vi ved, hvad et øjeblik er i Java, lad os se, hvordan vi kan konvertere det til en streng objekt.

2.1. Brug af DateTimeFormatter Klasse

Generelt har vi brug for en formatering til at formatere et Instant objekt. Heldigvis for os introducerede Java 8 DateTimeFormatter klasse til ensartet formatering af datoer og tidspunkter.

Grundlæggende DateTimeFormatter giver format() metode til at udføre jobbet.

Kort sagt DateTimeFormatter kræver en tidszone for at formatere et øjeblik . Uden den vil den ikke kunne konvertere instant til menneskelæselige dato/tidsfelter.

Lad os for eksempel antage, at vi ønsker at vise vores Instant instans ved hjælp af dd.MM.åååå format:

public class FormatInstantUnitTest {
    
    private static final String PATTERN_FORMAT = "dd.MM.yyyy";

    @Test
    public void givenInstant_whenUsingDateTimeFormatter_thenFormat() {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(PATTERN_FORMAT)
            .withZone(ZoneId.systemDefault());

        Instant instant = Instant.parse("2022-02-15T18:35:24.00Z");
        String formattedInstant = formatter.format(instant);

        assertThat(formattedInstant).isEqualTo("15.02.2022");
    }
    ...
}

Som vist ovenfor kan vi bruge withZone() metode til at angive tidszonen.

Husk på, at undladelse af at angive en tidszone vil føre til UnsupportedTemporalTypeException :

@Test(expected = UnsupportedTemporalTypeException.class)
public void givenInstant_whenNotSpecifyingTimeZone_thenThrowException() {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(PATTERN_FORMAT);

    Instant instant = Instant.now();
    formatter.format(instant);
}

2.2. Brug toString() Metode

En anden løsning ville være at bruge toString() metode til at få strengrepræsentationen af ​​Instant objekt.

Lad os eksemplificere brugen af ​​toString() metode ved hjælp af en testcase:

@Test
public void givenInstant_whenUsingToString_thenFormat() {
    Instant instant = Instant.ofEpochMilli(1641828224000L);
    String formattedInstant = instant.toString();

    assertThat(formattedInstant).isEqualTo("2022-01-10T15:23:44Z");
}

Begrænsningen ved denne tilgang er, at vi ikke kan bruge et brugerdefineret, menneskevenligt format til at vise øjeblikkeligt .

3. Joda-Time Library

Alternativt kan vi bruge Joda-Time API til at opnå det samme mål. Dette bibliotek indeholder et sæt klar-til-brug klasser og grænseflader til at manipulere dato og klokkeslæt i Java.

Blandt disse klasser finder vi DateTimeFormat klasse. Som navnet antyder, kan denne klasse bruges til at formatere eller parse dato/tidsdata til og fra en streng .

Så lad os illustrere, hvordan man bruger DateTimeFormatter for at konvertere et øjeblik til en streng:

@Test
public void givenInstant_whenUsingJodaTime_thenFormat() {
    org.joda.time.Instant instant = new org.joda.time.Instant("2022-03-20T10:11:12");
        
    String formattedInstant = DateTimeFormat.forPattern(PATTERN_FORMAT)
        .print(instant);

    assertThat(formattedInstant).isEqualTo("20.03.2022");
}

Som vi kan se, DateTimeFormatter giver forPattern() for at angive formateringsmønsteret og print() for at formatere Instant objekt.

4. Konklusion

For at opsummere det, i denne artikel, dækkede vi i dybden, hvordan man formaterer et øjeblik til en streng i Java.

Undervejs undersøgte vi et par måder at opnå dette på ved hjælp af kerne Java-metoder. Derefter forklarede vi, hvordan man opnår det samme ved at bruge Joda-Time-biblioteket.

Som altid kan koden, der bruges i denne artikel, findes på GitHub.


Java tag