принуждение 4 лет цифр в simpledateformat Java

Я хочу проверить, и проанализировать даты с помощью simpleDateFormat с форматом "yyyymmdd" Это также позволяет 100624, который анализируется к году 10 (спустя 54 года после того, как Julius Ceasar умер). Даты также будут чем-то как 1970, таким образом, я не захочу улаживать споры с SimpleDateFornat ("yymmdd").

Я задаюсь вопросом, там способ вызвать формат года из четырех знаков с помощью SimpleDateFormat? Я близко к regexp, тестируют заранее, но возможно существует умный способ использовать (Простой) DateFormat ()?

Согласно просьбе код, вещи добираются, больше усложняют, и мое исследование было половиной. Используемым Форматом был yyyy-MM-dd для запуска с (он прибыл из переменной, которая имела несправедливость javadoc). Однако, как обозначено в ответе ниже yyyyMMdd действительно вызывает четырехлетнюю цифру. Таким образом, мой вопрос изменяется на то, Как вызвать год из четырех знаков для формата "yyyy-MM-dd". И почему "yyyyMMdd" ведет себя отличающийся?

    public void testMaturity() {
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        sdf.setLenient(false);
        System.out.println(" " + sdf.format(sdf.parse("40-12-14")));
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd");
        sdf.setLenient(false);
        System.out.println(" " + sdf2.format(sdf2.parse("401214")));
        fail();
    } catch (ParseException pe) {
        assertTrue(true);
    }

Который печатает 14.12.40

15
задан dr jerry 24 June 2010 в 09:39
поделиться

4 ответа

Просто введите yyyyMMdd (примечание: верхний регистр M используется для обозначения месяца, в противном случае вы анализируете минуты !), А затем проверьте, больше ли год какой-нибудь даты отсечения ( например, при синтаксическом анализе дат рождения более 1800 является безопасной ставкой, тогда как синтаксический анализ дат для последующих дат больше или равняется текущему году).

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

Хм... Я подозреваю, что вам следует использовать "MM" вместо "mm" для начала... но "100624" не парсится в любом случае, когда я пробую - даже в смягченном режиме:

import java.util.*;
import java.text.*;

public class Test
{
    public static void main(String[] args) throws Exception
    {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        format.setLenient(true);
        tryParse(format, "100624");
        format.setLenient(false);
        tryParse(format, "100624");
    }

    static void tryParse(DateFormat format, String text)
    {
        try
        {
            Date date = format.parse(text);
            System.out.println("Parsed " + text + " to " + date);
        }
        catch (ParseException pe)
        {
            System.out.println("Failed to parse " + text);
        }
    }
}

(И даже используя "mm" вместо "MM" он все еще не парсится.)

Печатает:

Failed to parse 100624
Failed to parse 100624

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

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

Попробуйте вызвать setLenient (false); на Объект SimpleDateFormat - это заставит его использовать более строгие правила для синтаксического анализа (в противном случае он будет пытаться быть «умным», если входная строка не точно соответствует формату). Например:

DateFormat df = new SimpleDateFormat("yyyyMMdd");
df.setLenient(false);

И, конечно же, месяцы равны ММ , а не мм .

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

Для этого нет простого способа. Если вы говорите, что даты могут быть как 1970, то главный вопрос будет в том, что означает 700624 - 1970 или 2070? Вы должны либо ввести некоторую дату отсечения, как предложил Joachim, либо полностью перейти на 4-значный год.

1
ответ дан 1 December 2019 в 04:57
поделиться
Другие вопросы по тегам:

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