将String Date转换为String date不同的格式

时间:2013-02-21 10:09:15

标签: java simpledateformat date-conversion

我是Java新手。 Postgres db包含日期格式yyyy-MM-dd。我需要转换为dd-MM-yyyy

我试过这个,但显示错误的结果

   public static void main(String[] args) throws ParseException {

    String strDate = "2013-02-21";
      DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
      Date da = (Date)formatter.parse(strDate);
      System.out.println("==Date is ==" + da);
      String strDateTime = formatter.format(da);

      System.out.println("==String date is : " + strDateTime);
}

8 个答案:

答案 0 :(得分:28)

SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat format2 = new SimpleDateFormat("dd-MM-yyyy");
Date date = format1.parse("2013-02-21");
System.out.println(format2.format(date));

答案 1 :(得分:9)

您需要使用两个DateFormat个实例。一个包含输入字符串的格式,另一个包含输出字符串的所需格式。

public static void main(String[] args) throws ParseException {

    String strDate = "2013-02-21";

    DateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd");
    Date da = (Date)inputFormatter.parse(strDate);
    System.out.println("==Date is ==" + da);

    DateFormat outputFormatter = new SimpleDateFormat("dd-MM-yyyy");
    String strDateTime = outputFormatter.format(da);
    System.out.println("==String date is : " + strDateTime);
}

答案 2 :(得分:2)

您需要一种格式来解析当前状态和格式以生成所需的输出。

String strDate  = "2013-02-21";
DateFormat to   = new SimpleDateFormat("dd-MM-yyyy"); // wanted format
DateFormat from = new SimpleDateFormat("yyyy-MM-dd"); // current format
System.out.println(to.format(from.parse(strDate)));

答案 3 :(得分:2)

参考这些格式Java Date Format Docs

Formats for datetime

试用此代码:

String myDate= "2013-02-21";
DateFormat iFormatter = new SimpleDateFormat("yyyy-MM-dd");
DateFormat oFormatter = new SimpleDateFormat("dd-MM-yyyy");
String strDateTime = oFormatter.format(iFormatter.parse(myDate));

答案 4 :(得分:1)

尝试以下实用功能。

// convert String date to another string date
public String convertStringDateToAnotherStringDate(String stringdate, String stringdateformat, String returndateformat){        

        try {
            Date date = new SimpleDateFormat(stringdateformat).parse(stringdate);
            String returndate = new SimpleDateFormat(returndateformat).format(date);
            return returndate;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "";
        }

}

// call function with required parameter arguments
String resultDate = convertStringDateToAnotherStringDate("2017-06-22", "yyyy-MM-dd", "dd-MM-yyyy")
System.out.println(resultDate);
  

结果: 22-06-2017

答案 5 :(得分:0)

您使用相同的格式化程序来处理不同的格式。

您需要提供两个格式化程序new SimpleDateFormat("dd-MM-yyyy");,用于将2013-02-21转换为日期对象,new SimpleDateFormat("dd-MM-yyyy");用于将日期对象格式化为字符串21-02-2013

答案 6 :(得分:0)

首先,您不应该从Postgres数据库中获取String的日期。您应该将其作为表示日期的类型的对象。

第二,虽然在2013年DateSimpleDateFormat的使用是司空见惯和合理的,但日子已经过去了,新的和更好的日期和时间类已经出现并且已经普遍使用。恕我直言,没有人应该再使用旧课程,我认为它们已经过时了。

从数据库中LocalDate获取ResultSet个对象:

    LocalDate da = yourResultSet.getObject(3, LocalDate.class);

(我假设日期在查询的第3列中)。

将其格式化为dd-MM-yyyy

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
    String strDateTime = da.format(formatter);
    System.out.println("==String date is : " + strDateTime);

这会产生类似

的输出
==String date is : 21-02-2013

最后,如果您有问题中的字符串,并希望将其重新格式化为您想要的格式:

    String strDate = "2013-02-21";      
    LocalDate da = LocalDate.parse(strDate);
    System.out.println("==Date is ==" + da);

打印

==Date is ==2013-02-21

我正在利用字符串与ISO 8601标准日期格式相匹配的事实,该日期格式是现代日期和时间类的默认值。所以在这种情况下,我们不需要显式格式化器来解析,就像我们解析其他格式一样。

格式化为您想要的格式与以前完全相同。

旧类

的问题示例

在我的计算机上,问题代码的输出是

==Date is ==Tue Aug 06 00:00:00 CET 26
==String date is : 06-08-0026

你显然得到了错误的结果,而你却不知道出了什么问题。 错误的原因是您正在使用您希望用于 new 字符串2013-02-21的格式化程序解析数据库日期字符串dd-MM-yyyy。所以它被解析为2013年2月21日公元。二月有没有2013天?对于具有默认设置的SimpleDateFormat没有问题,它只是继续计算几个月到几个月和几年,并在五年半后的8月6日结束,但仍然很早。

如果我们尝试与现代课程类似:

    LocalDate.parse(strDate, formatter);

- 我们得到java.time.format.DateTimeParseException: Text '2013-02-21' could not be parsed at index 2。这是因为格式化程序指示了2位数的日期,因此在解析两个数字后,输入字符串中有更多数字,这是一个错误并且报告为这样。我认为这种行为更正确,更有帮助。

答案 7 :(得分:0)

您需要使用SimpleDateFormat实例并传递您喜欢的日期模式

当前模式:yyyy-MM-dd

所需的模式:dd-MM-yyyy

现在尝试以下操作。它会产生所需的日期格式模式。

public class App {
    public static void main(String[] args) {
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat format2 = new SimpleDateFormat("dd-MM-yyyy");
        Date date = null;
        try {
            date = format1.parse("2013-02-21");
            System.out.println(format1.format(date)); //current format: 2013-02-21
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(format2.format(date)); //the format that is needed : 21-02-2013
    }
}