Я хочу проверить, и проанализировать даты с помощью 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
Просто введите yyyyMMdd
(примечание: верхний регистр M используется для обозначения месяца, в противном случае вы анализируете минуты !), А затем проверьте, больше ли год какой-нибудь даты отсечения ( например, при синтаксическом анализе дат рождения более 1800 является безопасной ставкой, тогда как синтаксический анализ дат для последующих дат больше или равняется текущему году).
Хм... Я подозреваю, что вам следует использовать "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
Возможно, вы могли бы показать код, который является умудряется парсить это?
Попробуйте вызвать setLenient (false);
на Объект SimpleDateFormat
- это заставит его использовать более строгие правила для синтаксического анализа (в противном случае он будет пытаться быть «умным», если входная строка не точно соответствует формату). Например:
DateFormat df = new SimpleDateFormat("yyyyMMdd");
df.setLenient(false);
И, конечно же, месяцы равны ММ
, а не мм
.
Для этого нет простого способа. Если вы говорите, что даты могут быть как 1970, то главный вопрос будет в том, что означает 700624 - 1970 или 2070? Вы должны либо ввести некоторую дату отсечения, как предложил Joachim, либо полностью перейти на 4-значный год.