Androidew1267
Androidew1267

Reputation: 623

ZonedDateTime localized format

I want to display ZonedDateTime in format like

11.10.2022 13:30 (GMT+2) / 11.10.2022 01:30 PM (GMT+2)

depending on device settings. So far I have done something similar using formatDateTime function from DateUtils class, but this function doesn't display

(GMT+2)

It takes time in milliseconds as a argument. How can I do this with ZonedDateTime?

Upvotes: 0

Views: 197

Answers (1)

Vadik Sirekanyan
Vadik Sirekanyan

Reputation: 4652

Use DateTimeFormatter helper from java.time.format to format ZonedDateTime, for example:

val time = ZonedDateTime.now()
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm (O)")
formatter.format(time) // will return time in format 11.10.2022 13:30 (GMT+2)

See which symbols you can use to construct the pattern in the official docs.

To implement your particular case, you can also use DateTimeFormatterBuilder:

val time = ZonedDateTime.now()
val formatter = DateTimeFormatterBuilder()
    .appendPattern("dd.MM.yyyy ")
    .appendLocalized(null, FormatStyle.SHORT)
    .appendPattern(" (O)")
    .toFormatter()
formatter.format(time) // will return time depending on Locale

The last line of the code will return time in the desired format:

11.10.2022 13:30 (GMT+2) / 11.10.2022 01:30 PM (GMT+2)

Depending on device Locale:

Locale.FRANCE / Locale.US

Upvotes: 1

Related Questions