【问题标题】:String to joda LocalDate in format of "dd-MMM-yy"以“dd-MMM-yy”格式转换为 joda LocalDate 的字符串
【发布时间】:2013-08-08 21:49:10
【问题描述】:

我正在使用 JAXB 和 joda time 2.2。将数据从 Mysql 备份到 XML 并恢复。在我的表中,我有一个格式为“16-Mar-05”的日期属性。我成功地将它存储在 XML 中。但是当我想从 XML 中读取它并将其放回 Mysql 表中时,我无法获得正确的格式。

这是我的 XMLAdapter 类,在 unmarshal 方法中,输入字符串为“16-Mar-05”,但我无法获取格式为“16-Mar-05”的 localDate 变量,尽管我将模式设置为“dd-MMM-yy”。我发布了我尝试过的所有选项,我怎样才能在“dd-MMM-yy”中获得我的 localDate,比如 16-Mar-05 格式?

谢谢!!

public class DateAdapter extends XmlAdapter<String, LocalDate> {

// the desired format
private String pattern = "dd-MMM-yy";

@Override
public String marshal(LocalDate date) throws Exception {
    //return new SimpleDateFormat(pattern).format(date);
    return date.toString("dd-MMM-yy");
}

@Override
public LocalDate unmarshal(String date) throws Exception {
    if (date == null) {
        return null;
    } else {
        //first way
        final DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MMM-yy");
        final LocalDate localDate2 = dtf.parseLocalDate(date);

        //second way
        LocalDate localDate3 = LocalDate.parse(date,DateTimeFormat.forPattern("dd-MMM-yy"));

        //third way
        DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("dd-MMM-yy");
        DateTime dateTime = FORMATTER.parseDateTime(date);
        LocalDate localDate4 = dateTime.toLocalDate();
        return localDate4;
    }
}

【问题讨论】:

  • 我运行了你的代码,没有发现问题

标签: java mysql jaxb jodatime


【解决方案1】:

所以我拿走了你的代码并运行它,它对我来说很好......

我认为,您遇到的问题是您希望 LocalDate 对象保持您最初解析对象时使用的格式,这不是 LocalDate 的工作方式。

LocalDate 是日期或时间段的表示,它不是一种格式。

LocalDate 有一个toString 方法可以用来转储对象的值,它是对象用来提供人类可读表示的内部格式。

要格式化日期,您需要使用某种格式器,它将获取您想要的模式和日期值并返回String

比如下面的代码……

SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String date = "16-Mar-05";

DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MMM-yy");
LocalDate localDate2 = dtf.parseLocalDate(date);
System.out.println(localDate2 + "/" + dtf.print(localDate2));

//second way
LocalDate localDate3 = LocalDate.parse(date, DateTimeFormat.forPattern("dd-MMM-yy"));
System.out.println(localDate3 + "/" + dtf.print(localDate3));

//third way
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("dd-MMM-yy");
DateTime dateTime = FORMATTER.parseDateTime(date);
LocalDate localDate4 = dateTime.toLocalDate();
System.out.println(localDate4 + "/" + FORMATTER.print(localDate4));

制作...

2005-03-16/16-Mar-05
2005-03-16/16-Mar-05
2005-03-16/16-Mar-05

在您对此感到不安之前,Java Date 也是这样工作的。

【讨论】:

  • 感谢您的回复!是的,就是这样我不想要这个:2005-03-16 我想要这个:2005 年 3 月 16 日。但未打印我需要将它保存在一个变量中,以便我可以返回它。我该怎么做?
  • 使用其中一种格式化程序,如代码中所示,将日期转换为您需要的字符串表示形式。如果数据库需要一个 Date 对象,那么您无需担心,因为数据库将以它需要的格式存储日期的表示形式,并将返回一个日期对象,然后您可以根据需要对其进行格式化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
相关资源
最近更新 更多