处理不同格式的java本身的日期

时间:2015-11-18 15:45:34

标签: java

我有以下方法

其中参数stringValue in中的内容可以接收字符串数据类型中的日期为

06/20/13

或者我可以收到日期

16/02/2018

所以我应该能够解析它并将其发送到日期类型 现在从下面的代码我能够实现它,但问题是我的年份部分被扣除所以在调试后我发现它来了

[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;

    }

日期格式为DD / MM / Yy,我使用的是Java 5.请告知

2 个答案:

答案 0 :(得分:0)

一旦收到字符串,就不需要使用日期。

您只需要假设一条规则,如果您收到一个2位数的年份,您需要使用一系列年份并选择输入的正确世纪。

实施例: 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

答案 1 :(得分:-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