2016-11-21 14 views
0

Я установил японскую дату с помощью Locale (например, 21 11 月 2016) в приложении для Android. Но я хочу отправить эту дату в формат «dd-MM-yyyy» (например, 21-11-2016) для своих API.Как преобразовать японскую дату в формат даты на английском языке?

Когда я пытаюсь сделать это я получаю ниже исключение:

java.lang.IllegalArgumentException: Плохой класс: класс java.lang.String

Ниже мой код:

public String convertDate(String date) { 
    System.out.println("......ORIGINAL DATE....... " + date); // ......ORIGINAL DATE....... 21 11月 2016 
    String myFormat = "dd-MM-yyyy"; //In which you need put here 
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, new Locale(getMyLocale())); //Japanese locale is set but tried english too 
    System.out.println("......CONVERTED DATE....... " + sdf.format(date)); //should be 21-11-2016 but getting above error 
    return sdf.format(new Date(date)); 
} 

Кроме того, для US/English Locale он отлично работает, но для японца я получаю эту ошибку.

+0

, как вы разбор строки, то вы должны использовать '' parse' не format' Также формат '21 11 月 2016' не' дд-MMM- yyyy' - попробуйте разобрать формат 'dd MM 月 yyyy', если это действительно ваша строка –

+0

См. dd-MM-yyyy - это формат, в котором он мне нужен, но на текстовом ярлыке, который я установил как 21 ноября 2016 года. – VVB

+0

И для синтаксического анализа Я получаю эту ошибку java.text.ParseException: Unparseable date: «2016 年 11 月 21 日» (со смещением 11) – VVB

ответ

1

java.time

Вы используете хлопотно старый устаревшие классы даты и время вытесняли классы java.time.

Определите объект DateTimeFormatter, чтобы соответствовать шаблону ваших строк ввода и укажите Locale для Японии. Введите строку ввода в объект LocalDate. Позвоните LocalDate.parse.

Определите объект DateTimeFormatter, чтобы он соответствовал желаемому выходу. Вызовите LocalDate::format, чтобы создать желаемую строку.

Это задокументировано много раз уже в StackOverflow. Пожалуйста, найдите, чтобы найти примерный код и дальнейшее обсуждение.


О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, теперь в maintenance mode, советует перейти на java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Где получить классы java.time?

  • Java SE 8 и SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть Явы.временная функциональность обратно перенесена на Java 6 & 7 в ThreeTen-Backport.
  • Android
    • Проект ThreeTenABP адаптирует ThreeTen-Backport (как упоминалось выше) для Android специально.
    • См. How to use….

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.

3

Вам нужны два форматтеры, как показано ниже

String in = "2016年11月 21日"; // really a space here? 
    SimpleDateFormat sdf1 = new SimpleDateFormat ("yyyy年MM月 dd日"); 
    Date d1 = sdf1.parse(in); 

    SimpleDateFormat sdf2 = new SimpleDateFormat ("dd-MM-yyyy"); 

    System.out.println(sdf2.format(d1));