当前位置: 首页 > 知识库问答 >
问题:

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

翁硕
2023-03-14

我正在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 上午

仿真器中的o/p:-06:45FM

实际设备中的O/p:上午06:45

预期成果

示例输入 :- 06:45 上午

仿真器中的o/p:-06:45FM

真实设备中的 O/p :- 06:45 FM

注意:此问题仅发生在时间区域设置转换中。日期转换在真实设备和模拟器设备中都可以正常工作。

提前感谢。

共有1个答案

宰父保臣
2023-03-14

首先,java.util date-time API 及其格式化 API,SimpleDateFormat 已经过时且容易出错。建议完全停止使用它们并切换到现代日期时间 API。

不管使用哪种API,问题最可能的原因是用一个参数初始化< code>Locale。您应该使用< code >新区域设置(" sv "," SE"),而不是< code >新区域设置(" sv")。

使用 java.time 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的更多信息。

 类似资料: