2015-11-18 10 views
0

У меня ниже этого методаобработки даты в Java самого различного формата

, в котором внутри параметра stringValue в можно получить дату в типе данных строки, как

06/20/13 

или я могу Получать дату,

16/02/2018 

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

[Date: year: 13 month : 7 day:5 ] for date type 06/20/13 

теперь я хочу год вперед, как

[Date: year: 2013 month : 7 day:5 ] 

он подходит правильно для 16/02/2018 это одно, пожалуйста, посоветуйте, как должен ли я исправить его для формата выше, чтобы он работал на обе даты.

public static Date convertStringToDate(String stringValue) { 
     Date iceDate = null; 
     java.util.Date javaDate = new java.util.Date(); 
     String[] formatStrings = { "dd/MM/yyyy", "dd-MMM-yyyy" }; 
     // DateFormat format = new SimpleDateFormat("dd/MM/yyyy", 
     // Locale.ENGLISH); 
     for (String formatString : formatStrings) { 

      try { 
       javaDate = new SimpleDateFormat(formatString) 
         .parse(stringValue); 
       iceDate = new Date(javaDate); 
       return iceDate; 
      } catch (ParseException e) { 
       logger.warn("##$$$$$### Error in invoice inside convertStringToDate method : ##$$$$$$#### " 
         + ErrorUtility.getStackTraceForException(e)); 

      } 
     } 
     return null; 

    } 

Формат даты в формате ДД/ММ/ГГ, и я использую Java 5. Пожалуйста посоветуйте

+4

«так что я должен быть в состоянии разобрать его и отправить его типа Дата обряду» - нет, если вы не Не знаю формат, нет. Есть ли «05/06/2015» - 6 или 5 июня? –

+0

@JonSkeet представляет 5 дней и 6 месяцев, что составляет июнь и год 2015. –

+1

Откуда вы знаете, что он представляет 5-й и 6-й месяцы, а не 6-й и 5-й? Имейте в виду, что вы заявляете, что «06/20/13» - действительный ввод, который помещает второй день. Это моя точка зрения - у вас есть неоднозначный набор форматов даты, после чего игра закончилась. –

ответ

-1
new SimpleDateFormat("dd/MM/yy") 

будет делать трюк, и он будет работать как для 2-х и 4-х значных лет

, например

private static final SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yy"); 
public static void main(String[] args) throws ParseException { 
    String date = "16/02/2018"; 
    Date d = null; 
    try { 
     d = sdf1.parse(date); 
    }catch(Exception e) { 
     System.out.println("ops"); 
    } 
    System.out.println(d); 
} 

будет генерировать

Fri Feb 16 00:00:00 BRST 2018 
+0

Спасибо, так что я могу обновить то же самое в моем вышеприведенном фрагменте кода, это будет отличная помощь, если вы также можете внести изменения в мой выше код кода, я могу получить больше благодарностей заранее –

+0

Как это происходит для обработки ввода «06/20/13»? –

+0

@jon, что точка, я ищу решение, которое будет обрабатывать как случай, если дата идет в 2 цифры (и если дата идет в 4-х значном формате также –

0

Вам не нужно работать с датами, как только вы получаете строку.

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

Пример: 20/11/78 тогда 20/11/1978 20/11/05 тогда 20/11/2005 После того, как вы предполагается работать в таком состоянии, вы можете дополнить 2 цифры год с этим условием:

 if(Integer.valueOf(year)>70) { 
       year="19"+year; 
      }else { 
       year="20"+year; 
      } 

Посмотрите код ниже:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Data { 

// four digit input 
    StringBuffer buffer = new StringBuffer(); 
    try { 
     String dateFour = "16/02/18"; 
     String tokens[] = dateFour.split("/"); // dd=0 MM=1 yyyy=2 or yy=2 
     String year = tokens[2]; 
     if (year.length() < 3) { 
      if (Integer.valueOf(year) > 70) { 
       year = "19" + year; 
       System.out.println(year); 
      } else { 
       year = "20" + year; 
       System.out.println(year); 
      } 
     } 
     buffer.append("[Date: year: " + year + " month : " + Integer.valueOf(tokens[1]) + " day:" + Integer.valueOf(tokens[0]) + " ] for date type " + date); 
    } catch (Exception e) { 
     System.out.println("ops"); 
    } 
    System.out.println(buffer.toString()); 
} 



} 

Вы будете иметь этот ответ от SYSOUT:

[Дата: год: 18 месяц: 2 дня: 16] для типа даты 16/02/18

+0

вы можете разобрать строку, используя разделитель «/», как только вы посчитаете четыре символа слева, вы можете использовать буквенные символы, преобразующие месяц и год в целое число, как только вы получаете строку –

Смежные вопросы