Java 如何从当前语言环境中获取日期时间格式字符串,作为SimpleDataFormat的参数

Java 如何从当前语言环境中获取日期时间格式字符串,作为SimpleDataFormat的参数,java,android,locale,simpledateformat,datetime-format,Java,Android,Locale,Simpledateformat,Datetime Format,我的Android应用程序希望显示日期时间字符串和相应的格式字符串。 它使用SimpleDataFormat,因为它与旧的Android API级别兼容 Calendar calendar=Calendar.getInstance(); formatString=getTheCurrentLocaleDateTimeFormatString(); SimpleDateFormat dateFormat = new SimpleDateFormat(formatString); localeTim

我的Android应用程序希望显示日期时间字符串和相应的格式字符串。 它使用SimpleDataFormat,因为它与旧的Android API级别兼容

Calendar calendar=Calendar.getInstance();
formatString=getTheCurrentLocaleDateTimeFormatString();
SimpleDateFormat dateFormat = new SimpleDateFormat(formatString);
localeTimeString= dateFormat.format(calendar.getTimeInMillis());
displayToTheUser(localeTimeString);
displayToTheUser(formatString);
例如,用户得到:“Wed,Jul 4 2001 12:08:56”和“EEE,d MMM yyy HH:mm:ss”

提供的代码片段旨在根据当前区域设置获取日期时间表单,但我不知道如何将其作为格式字符串获取。它应该由上面的getTheCurrentLocaleDateTimeFormatString()方法计算

我看到有很多格式字符串模式可用

这是相关文档页面:


由于我想将该格式字符串作为模板显示给用户,并将其用作SimpleDateFormat的参数,因此我的问题是:如何获取当前语言环境的日期-时间模式格式字符串?

您可以按如下操作:

SimpleDateFormat getTheCurrentLocaleDateTimeFormatString() {
    return (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault());
}
测试程序:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat dateFormat = getTheCurrentLocaleDateTimeFormatString();
        String localeTimeString = dateFormat.format(calendar.getTimeInMillis());
        System.out.println(localeTimeString);
    }

    static SimpleDateFormat getTheCurrentLocaleDateTimeFormatString() {
        return (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault());
    }
}
输出:

Sunday, 12 January 2020
EEEE, d MMMM y
Sunday, 12 January 2020
EEEE, d MMMM y 'at' HH:mm:ss zzzz
Sunday, 12 January 2020 at 20:28:05 Greenwich Mean Time

[更新]

根据您的评论发布以下代码:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Calendar calendar=Calendar.getInstance();
        String formatString=getTheCurrentLocaleDateTimeFormatString();
        System.out.println(formatString);
        SimpleDateFormat dateFormat = new SimpleDateFormat(formatString);
        String localeTimeString= dateFormat.format(calendar.getTimeInMillis());
        System.out.println(localeTimeString);
    }

    static String getTheCurrentLocaleDateTimeFormatString() {
        return ((SimpleDateFormat) DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault())).toLocalizedPattern();
    }
}
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        String formatString = getTheCurrentLocaleDateTimeFormatString();
        System.out.println(formatString);
        SimpleDateFormat dateFormat = new SimpleDateFormat(formatString);
        String localeTimeString = dateFormat.format(calendar.getTimeInMillis());
        System.out.println(localeTimeString);
    }

    static String getTheCurrentLocaleDateTimeFormatString() {
        return ((SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL,
                Locale.getDefault())).toLocalizedPattern();
    }
}
输出:

Sunday, 12 January 2020
EEEE, d MMMM y
Sunday, 12 January 2020
EEEE, d MMMM y 'at' HH:mm:ss zzzz
Sunday, 12 January 2020 at 20:28:05 Greenwich Mean Time

[另一个更新]

根据您的另一条评论发布以下代码:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Calendar calendar=Calendar.getInstance();
        String formatString=getTheCurrentLocaleDateTimeFormatString();
        System.out.println(formatString);
        SimpleDateFormat dateFormat = new SimpleDateFormat(formatString);
        String localeTimeString= dateFormat.format(calendar.getTimeInMillis());
        System.out.println(localeTimeString);
    }

    static String getTheCurrentLocaleDateTimeFormatString() {
        return ((SimpleDateFormat) DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault())).toLocalizedPattern();
    }
}
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        String formatString = getTheCurrentLocaleDateTimeFormatString();
        System.out.println(formatString);
        SimpleDateFormat dateFormat = new SimpleDateFormat(formatString);
        String localeTimeString = dateFormat.format(calendar.getTimeInMillis());
        System.out.println(localeTimeString);
    }

    static String getTheCurrentLocaleDateTimeFormatString() {
        return ((SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL,
                Locale.getDefault())).toLocalizedPattern();
    }
}
输出:

Sunday, 12 January 2020
EEEE, d MMMM y
Sunday, 12 January 2020
EEEE, d MMMM y 'at' HH:mm:ss zzzz
Sunday, 12 January 2020 at 20:28:05 Greenwich Mean Time
java.time和ThreeTenABP 使用java.time编写代码。现代Java日期和时间API也可以在旧的Android API级别上使用
DateTimeFormatterBuilder.getLocalizedDateTimePattern()
提供所需的格式模式字符串。例如:

    ZonedDateTime dateTIme = ZonedDateTime.now(ZoneId.of("America/Recife"));

    Locale userLocale = Locale.forLanguageTag("pt-BR");
    String formatPattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
            FormatStyle.LONG, FormatStyle.LONG,
            IsoChronology.INSTANCE, userLocale);
    DateTimeFormatter formatter
            = DateTimeFormatter.ofPattern(formatPattern, userLocale);
    String localeTimeString = dateTIme.format(formatter);

    System.out.println(localeTimeString);
    System.out.println(formatPattern);
刚才这个片段的输出是:

格式模式中的撇号包含文字部分,因此
de
h
min
s
不被视为格式模式字母,而是按格式日期和时间逐字输出

问:java.time不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

  • J/NEL回答了你的问题吗?JeNN我编辑了这个问题,我需要把格式字符串作为模板来显示给用户,顺便考虑一下,把长期过时的、臭名昭著的麻烦代码< SimpleDateFormat >代码>和朋友添加到Android项目中,以便使用<代码> java。现代Java日期和时间API。我编辑了这个问题,我需要将格式字符串作为模板显示给用户谢谢你的耐心,但是我还需要当前时间,所以我需要一个完整的日期和时间字符串。可能吗?