Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 俄语区域设置中的日期解析问题_Java_Android_Date Format - Fatal编程技术网

Java 俄语区域设置中的日期解析问题

Java 俄语区域设置中的日期解析问题,java,android,date-format,Java,Android,Date Format,我试图将下面的11аа1980Г。字符串解析为日期。此字符串为俄语格式。我正在使用这个代码片段来解析它 Locale locale = new Locale("ru", "RU"); System.out.println(locale.toString()); DateFormat full = DateFormat.getDateInstance(DateFormat.LONG, locale); try { Date date = full.parse("11 Ноя 1980 г.

我试图将下面的
11аа1980Г。
字符串解析为日期。此字符串为俄语格式。我正在使用这个代码片段来解析它

Locale locale = new Locale("ru", "RU");
System.out.println(locale.toString());
DateFormat full = DateFormat.getDateInstance(DateFormat.LONG, locale);
try {
    Date date = full.parse("11 Ноя 1980 г.");
    System.out.println(date);
} catch (ParseException e) {
    e.printStackTrace();
}
当以普通java程序的形式运行此代码时,输出解析的日期对象,但在android上运行此代码会出现以下异常

11-20 03:52:45.545 11241-11241/com.marcow.birthdaylist W/System.err: java.text.ParseException: Unparseable date: "11 Ноя 1980 г." (at offset 3)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at java.text.DateFormat.parse(DateFormat.java:579)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at com.marcow.birthdaylist.TestActivity.onCreate(TestActivity.java:44)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.app.Activity.performCreate(Activity.java:6237)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.app.ActivityThread.-wrap11(ActivityThread.java)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.os.Looper.loop(Looper.java:148)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5417)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-20 03:52:45.546 11241-11241/com.marcow.birthdaylist W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我不明白为什么它在java和android上的行为不同。

您需要更改这行代码:

DateFormat full = DateFormat.getDateInstance(DateFormat.LONG, locale);

注意:这里的格式您可以描述您想要的任何格式

或者尝试以下链接:


在俄罗斯地区,似乎月份的短名称在JDK和Adnroid SDK中以不同的方式编码。 这将有助于您:

    String testDate = "11 Ноя 1980 г.";
    String[] months = {"Янв", "Фев", "Мар", "Апр", "Мая", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"};
    Locale ru = new Locale("ru");
    DateFormatSymbols symbols = DateFormatSymbols.getInstance(ru);
    symbols.setMonths(months);
    SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy 'г.'", ru);
    format.setDateFormatSymbols(symbols);
    try {
        Log.d(TAG, "Date is: " + format.parse(testDate));
    } catch (Exception e) {
        Log.e(TAG, "Error while parsing", e);
    }

我强烈建议在生产使用之前在各种版本的Android上进行测试

把你的例外贴在这里我想DateFormat是Android的。这就是为什么你的结果不同。你能检查一下DateFormat来自哪里吗?@Kimkvin我已经检查过了。两者都有相同的导入语句。对,所以听起来像是在期待完整的月份名称,而您只提供了短月份名称。如果您知道要传递的字符串的格式,您可能值得创建带有显式模式的
SimpleDataFormat
。据我所知,不同的Android设备可能具有不同的日期格式设置,这也可能导致您在Java中获得的格式不同。如果这是真的,那就很烦人。正如其他人所说,显式格式模式字符串可能是解决办法。@VishvendraSingh我认为问题出在这个
Date-Date=full.parse(“11аа1980Γ”)    String testDate = "11 Ноя 1980 г.";
    String[] months = {"Янв", "Фев", "Мар", "Апр", "Мая", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"};
    Locale ru = new Locale("ru");
    DateFormatSymbols symbols = DateFormatSymbols.getInstance(ru);
    symbols.setMonths(months);
    SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy 'г.'", ru);
    format.setDateFormatSymbols(symbols);
    try {
        Log.d(TAG, "Date is: " + format.parse(testDate));
    } catch (Exception e) {
        Log.e(TAG, "Error while parsing", e);
    }