Разбор даты с коротким месяцем без точки

Попробуйте следующую простую функцию:

function _flatten_array($arr) {
  while ($arr) {
    list($key, $value) = each($arr); 
    is_array($value) ? $arr = $value : $out[$key] = $value;
    unset($arr[$key]);
  }
  return (array)$out;
}

Итак, из этого:

array (
  'und' => 
  array (
    'profiles' => 
    array (
      0 => 
      array (
        'commerce_customer_address' => 
        array (
          'und' => 
          array (
            0 => 
            array (
              'first_name' => 'First name',
              'last_name' => 'Last name',
              'thoroughfare' => 'Address 1',
              'premise' => 'Address 2',
              'locality' => 'Town/City',
              'administrative_area' => 'County',
              'postal_code' => 'Postcode',
            ),
          ),
        ),
      ),
    ),
  ),
)

вы получаете:

array (
  'first_name' => 'First name',
  'last_name' => 'Last name',
  'thoroughfare' => 'Address 1',
  'premise' => 'Address 2',
  'locality' => 'Town/City',
  'administrative_area' => 'County',
  'postal_code' => 'Postcode',
)
14
задан Esko 28 October 2009 в 08:38
поделиться

4 ответа

Похоже, это работает:

    DateFormatSymbols dfsFr = new DateFormatSymbols(Locale.FRENCH);
    String[] oldMonths = dfsFr.getShortMonths();
    String[] newMonths = new String[oldMonths.length];
    for (int i = 0, len = oldMonths.length; i < len; ++ i) {
        String oldMonth = oldMonths[i];

        if (oldMonth.endsWith(".")) {
            newMonths[i] = oldMonth.substring(0, oldMonths[i].length() - 1);
        } else {
            newMonths[i] = oldMonth;
        }
    }
    dfsFr.setShortMonths(newMonths);
    DateFormat dfFr = new SimpleDateFormat(
        "dd-MMM-yy", dfsFr);

    // English date parser for creating some test data.
    DateFormat dfEn = new SimpleDateFormat(
        "dd-MMM-yy", Locale.ENGLISH);
    System.out.println(dfFr.format(dfEn.parse("10-Oct-09")));
    System.out.println(dfFr.format(dfEn.parse("10-May-09")));
    System.out.println(dfFr.format(dfEn.parse("10-Feb-09")));

Изменить: Похоже, Сент-Тень меня опередил.

6
ответ дан 1 December 2019 в 04:47
поделиться

Вы можете просто удалить ".":

df2.format(new Date()).replaceAll("\\.", ""));

Изменить, относительно лимона ответа:

Похоже, проблема с форматированием при использовании Локаль французский. Таким образом, я предлагаю вам просто использовать . удаление, как я объяснил.

Действительно, следующий код:

    String format2 = "dd-MMM-yy";
    Date date = Calendar.getInstance().getTime();
    SimpleDateFormat sdf = new SimpleDateFormat(format2, Locale.FRENCH);
    System.out.println(sdf.format(date));
    sdf = new SimpleDateFormat(format2, Locale.ENGLISH);
    System.out.println(sdf.format(date));

отображает следующий вывод:

28-oct.-09
28-Oct-09

Изменить снова

Хорошо, я понял вашу проблему прямо сейчас.

Я действительно не знаю, как вы может решить эту проблему без предварительной обработки строки. Идея состоит в том, чтобы заменить месяц в исходной строке на исчерпывающий месяц:

        String[] givenMonths = { "jan", "fév", "mars", "avr.", "mai", "juin", "juil", "août", "sept", "oct", "nov", "déc" };
        String[] realMonths = { "janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc." };
        String original = "09-oct-08";
        for (int i = 0; i < givenMonths.length; i++) {
            original = original.replaceAll(givenMonths[i], realMonths[i]);
        }
        String format2 = "dd-MMM-yy";
        DateFormat df2 = new SimpleDateFormat(format2, Locale.FRENCH);
        Date date = df2.parse(original);
        System.out.println("--> " + date);

Я согласен, это ужасно, но я не вижу другого решения, если вы используете SimpleDateFormat и Date классы.

Другое решение - использовать настоящую библиотеку даты и времени вместо исходных JDK-библиотек,

3
ответ дан 1 December 2019 в 04:47
поделиться
String format2 = "dd-MMM-yy";
Date date = Calendar.getInstance().getTime();
SimpleDateFormat sdf = new SimpleDateFormat(format2);
System.out.println(sdf.format(date));

Выходы 28 октября 2009 г.

Я не вижу точек, сэр. Вы пробовали перепроверить свои отпечатки? Возможно, вы случайно поместили . рядом с вашим MMM ?


Вы получаете java.text.ParseException: неразборчивая дата: «09 окт.08» с «09 окт.08» не соответствует форматированию Locale.FRENCH , либо используйте локаль по умолчанию (я думаю, США), либо добавьте . рядом с вашим окт

1
ответ дан 1 December 2019 в 04:47
поделиться

Хорошо, тогда попробуйте «грубую силу» :)

DateFormatSymbols dfs = new DateFormatSymbols(Locale.FRENCH);
String[] months = new String[13]
<fill with correct month names or just replace these month, that are not fully correct>
dfs.setMonths(months);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy", dfs);
Date nweDate = sdf.parse("09-fév-08");
1
ответ дан 1 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: