从美国到瑞典的简单日期格式时间转换在真实设备上不起作用,但在模拟器上工作



我在android上的SimpleDatFormat工作。我尝试将时间从美国转换为瑞典。它在模拟器中工作得很好,但当我在三星设备上测试它时,它不工作。在其他设备和版本上运行良好。

SimpleDateFormat inputFormat = new SimpleDateFormat("hh:mm a", Locale.US);
SimpleDateFormat outputFormat = new SimpleDateFormat("hh:mm a", new Locale("sv"));
try {
return outputFormat.format(inputFormat.parse(date));
} catch (ParseException e) {e.printStackTrace();}
return null;

实际结果

示例输入:- 06:45 AM

模拟器中的O/p:- 06:45 FM

O/p在实际设备:- 06:45 AM

预期结果

示例输入:- 06:45 AM

模拟器中的O/p:- 06:45 FM

O/p在实际设备:- 06:45 FM

注意:此问题仅发生在时间区域设置转换中。日期转换在真实设备和仿真设备中都能很好地工作。

提前感谢。

首先,java.util日期时间API和它们的格式化API,SimpleDateFormat是过时的和容易出错的。建议完全停止使用它们并切换到现代日期时间API。

无论您使用哪种API,问题的最可能原因是用一个参数初始化Locale。你应该用new Locale("sv","SE")而不是new Locale("sv")

java演示。时间API:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter parser = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a", new Locale("sv", "SE"));
LocalTime time = LocalTime.parse("06:45 AM", parser);
String formatted = time.format(formatter);
System.out.println(formatted);
}
}

:

06:45 fm

Trail: Date Time了解更多关于现代Date-Time API的信息.

Arvind Kumar Avinash的答案是正确而聪明的。

另外,我们可以让java。Time自动本地化而不是硬编码格式。

<标题>自动定位

tl;博士

localTime
.format(
DateTimeFormatter
.ofLocalizedTime( FormatStyle.SHORT )
.withLocale( new Locale( "sv" , "SE" ) )  // Swedish language, Sweden culture.
)

查看此代码运行在Ideone.com。

06:45

详细信息你似乎只对小时和分钟感兴趣,而对秒或分数秒不感兴趣。所以我们可以截断值

LocalTime localTime = localTime.truncatedTo( ChronoUnit.MINUTES ) ;

我们可以检查一些区域设置,以进行比较。我们将尝试瑞典、美国和加拿大(法国)。

List < Locale > locales = List.of( new Locale( "sv" , "SE" ) , Locale.US , Locale.CANADA_FRENCH );

循环区域设置。对于每个语言环境,循环各种FormatStyle枚举对象,这些对象只能使用一天中的时间值(SHORT&MEDIUM)。

for ( Locale locale : locales )
{
System.out.println( "-------|  " + locale + "  |--------" );
for ( FormatStyle formatStyle : List.of( FormatStyle.SHORT , FormatStyle.MEDIUM ) )
{
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedTime( formatStyle ).withLocale( locale );
String output = localTimeTruncated.format( formatter );
System.out.println( formatter + " ➠ " + output );
}
}

运行时:

localTime = 06:45:07
localTimeTruncated = 06:45
-------|  sv_SE  |--------
Localized(,SHORT) ➠ 06:45
Localized(,MEDIUM) ➠ 06:45:00
-------|  en_US  |--------
Localized(,SHORT) ➠ 6:45 AM
Localized(,MEDIUM) ➠ 6:45:00 AM
-------|  fr_CA  |--------
Localized(,SHORT) ➠ 06 h 45
Localized(,MEDIUM) ➠ 06 h 45 min 00 s

相关内容

  • 没有找到相关文章

最新更新