将日期从默认语言环境转换为英语语言环境

RiT*_*hBo 5 string android locale date android-date

我通过使用格式化来保存日期SimpleDateFormat.

DateFormat dateForm = new SimpleDateFormat("HH mm ss dd MMM ''yy"); 
            String dateOutput = dateForm.format(new Date());
Run Code Online (Sandbox Code Playgroud)

这使用设备的默认语言环境,例如法语或西班牙语.

如何将此字符串(格式化为不同的Locale)转换回Date格式为Locale.ENGLISH?的对象?

目前,当我尝试将字符串转换回日期时,我得到一个不可解析的日期异常.这是由使用不同的区域设置保存日期的事实引起的

Big*_*igT 9

这对你有用

SimpleDateFormat sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.ENGLISH);
String dateOutput = sdf.format(new Date());
Run Code Online (Sandbox Code Playgroud)

编辑

我的想法是用Calendar对象分解它并用另一种语言格式化它.试试这个

SimpleDateFormat sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.getDefault());
Calendar cal = Calendar.getInstance();
int day = 0, month = 0, year = 0, hour = 0, minute = 0, sec = 0;
String loc = Locale.getDefault().getDisplayLanguage();
try {
    Date testDate = sdf.parse(date);
    cal.setTime(testDate);
    sec = cal.get(Calendar.SECOND);
    minute = cal.get(Calendar.MINUTE);
    hour = cal.get(Calendar.HOUR);
    day = cal.get(Calendar.DATE);
    month = cal.get(Calendar.MONTH);
    year = cal.get(Calendar.YEAR);
} catch (ParseException e) {
    if(loc.equals(Locale.ENGLISH.getDisplayLanguage())){
        sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.FRENCH);
        try {
            Date testDate = sdf.parse(date);
            cal.setTime(testDate);
            sec = cal.get(Calendar.SECOND);
            minute = cal.get(Calendar.MINUTE);
            hour = cal.get(Calendar.HOUR);
            day = cal.get(Calendar.DATE);
            month = cal.get(Calendar.MONTH);
            year = cal.get(Calendar.YEAR);
        } catch (ParseException ee) {
            sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.FRENCH);
            try {
                Date testDate = sdf.parse(date);
                cal.setTime(testDate);
                sec = cal.get(Calendar.SECOND);
                minute = cal.get(Calendar.MINUTE);
                hour = cal.get(Calendar.HOUR);
                day = cal.get(Calendar.DATE);
                month = cal.get(Calendar.MONTH);
                year = cal.get(Calendar.YEAR);
            } catch (ParseException eex) {

            }
        }
    }
    else if (loc.equals(Locale.FRENCH.getDisplayLanguage())){
        sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.ENGLISH);
        try {
            Date testDate = sdf.parse(date);
            cal.setTime(testDate);
            sec = cal.get(Calendar.SECOND);
            minute = cal.get(Calendar.MINUTE);
            hour = cal.get(Calendar.HOUR);
            day = cal.get(Calendar.DATE);
            month = cal.get(Calendar.MONTH);
            year = cal.get(Calendar.YEAR);
        } catch (ParseException fe) {

        }
    }
}
cal.set(Calendar.SECOND, sec);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.HOUR, hour);
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, day);
if(loc.equals(Locale.ENGLISH.getDisplayLanguage()))
        sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.getDefault());
else if(loc.equals(Locale.FRENCH.getDisplayLanguage()))
    sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.getDefault());
Date convertedLangDate = cal.getTime();
String newDate = sdf.format(convertedLangDate);
Run Code Online (Sandbox Code Playgroud)

这对我有用,但它不是最优雅的解决方案.为你的代码调整它.