Java 如何从当前语言环境中获取日期时间格式字符串,作为SimpleDataFormat的参数
我的Android应用程序希望显示日期时间字符串和相应的格式字符串。 它使用SimpleDataFormat,因为它与旧的Android API级别兼容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
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。我编辑了这个问题,我需要将格式字符串作为模板显示给用户谢谢你的耐心,但是我还需要当前时间,所以我需要一个完整的日期和时间字符串。可能吗?