Преобразование DataTime в локальный формат даты

Как преобразовать DateTime в локальный формат даты?

Пример: дата: 25.01.2014, 00:00:00. Эта дата в формате США, но на моей машине я использую формат TR 25.01.2014, а также предполагаю, что другая машина использует другой формат. Пример: 2014/1/25.

Как я могу программно преобразовать эту дату в локальный формат даты?

Я использую Java версии 1.7 и хочу использовать java.util.Calendar.

Заранее спасибо.


person HurkanSeyhan    schedule 14.06.2014    source источник
comment
Вы имеете в виду с 25.01.2014 по 25.01.2014?   -  person Rod_Algonquin    schedule 15.06.2014
comment
Какая версия java?? до 1.8?   -  person isaias-b    schedule 15.06.2014
comment
Не очевидно, о чем вы спрашиваете. Joda-Time, API даты Java 8 или что-то совершенно другое. Пожалуйста, уточните свой вопрос; желательно с простым примером кода, который иллюстрирует вашу проблему.   -  person Boris the Spider    schedule 15.06.2014
comment
@isi да, я использую 1.7   -  person HurkanSeyhan    schedule 15.06.2014
comment
Потребуется еще одна вещь, какой из классов java Date вы имеете в виду? java.util.Date или java.sql.Date   -  person isaias-b    schedule 15.06.2014
comment
ваш вопрос, возможно, дублирует вопрос, в котором даты UTC преобразуются в локальные даты в java см. здесь   -  person isaias-b    schedule 15.06.2014
comment
Мой вам совет: вообще не использовать календарь, если возможно, переключитесь на java 1.8 или добавьте библиотеку joda.time, которая объединена с java 1.8 в качестве нового стандарта. до версии 1.8 действительно простые вещи были труднодостижимы, взгляните на JSR310   -  person isaias-b    schedule 15.06.2014
comment
Чтобы отобразить java.util.Date с использованием локального формата даты текущего компьютера, передайте объект Date в format метод DateFormat.getDateInstance(DateFormat.SHORT).   -  person VGR    schedule 15.06.2014


Ответы (1)


DateTimeFormatter.ofLocalizedDateTime

Используйте его, чтобы получить формат даты для локали для хронологии ISO.

Демонстрация:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfLocalized = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT, FormatStyle.SHORT);
        // Test
        LocalDateTime date = LocalDateTime.now();

        System.out.println(dtfLocalized.withLocale(Locale.US).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.UK).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.CHINESE).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.GERMAN).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.forLanguageTag("tr")).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.getDefault()).format(date));
    }
}

Вывод:

5/8/21, 6:54 PM
08/05/2021, 18:54
2021/5/8 下午6:54
08.05.21, 18:54
8.05.2021 18:54
08/05/2021, 18:54

Примечание. Если вы хотите отформатировать только часть даты, замените DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT, FormatStyle.SHORT) на DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).

Узнайте больше о современном API даты и времени* из Trail: Дата и время.


* По какой-либо причине, если вам нужно придерживаться Java 6 или Java 7, вы можете использовать ThreeTen-Backport, который переносит большую часть функций java.time на Java 6 и 7. Если вы работаете над проектом Android и ваш уровень Android API по-прежнему не соответствует Java-8, проверьте Java 8+ API доступно через дешугаринг и Как использовать ThreeTenABP в Android Project.

person Arvind Kumar Avinash    schedule 08.05.2021
comment
Вопрос не ясен, но входные данные представляют собой строку с датой и временем суток: 1/25/2014 12:00:00 AM. В вашем ответе указана только дата. Я подозреваю, что этот вопрос лучше закрыть из-за неясности. - person Basil Bourque; 08.05.2021
comment
Я подозреваю, что вопрос касается синтаксического анализа входной строки 1/25/2014 12:00:00 AM, а затем извлечения части, содержащей только дату. - person Basil Bourque; 08.05.2021
comment
@BasilBourque - я думаю, дело в форматировании. Требование, установленное OP: Как преобразовать DateTime в локальный формат даты?... - person Arvind Kumar Avinash; 08.05.2021
comment
Интересно, относится ли «формат TR» к коду страны TR для Турции? На странице профиля автора упоминается Турция ????????. - person Basil Bourque; 08.05.2021
comment
@BasilBourque Скорее всего. Профиль ОП сообщает нам о местоположении в Турции. - person Ole V.V.; 08.05.2021
comment
Со своей стороны, я прочитал вопрос о том, как отформатировать часть даты, игнорируя часть времени. А со своей стороны думаю добавить Locale.forLanguageTag("tr") и Locale.getDefault() На ваше усмотрение, конечно. - person Ole V.V.; 08.05.2021
comment
@ОлеВ.В. - Спасибо. Я добавил турецкую локаль, а также локаль по умолчанию. Я также добавил примечание относительно форматирования только части даты. - person Arvind Kumar Avinash; 08.05.2021