1

我有这种格式的日期 2009-09-17T00:00:00.000-35:00 。根据我的应用程序的业务规则,我编写了 3 种方法,它们将接受此日期并返回 MM/yyyy、yyyyMM 和 dd 中的日期。

例如,一种方法如下所示 MM/yyyy

private String getMonthYear(String date) throws Exception {
        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
        String s1 = date;
        String s2 = null;
        Date d;
        try {
            d = sdf.parse(s1);
            s2 = (new SimpleDateFormat("MM/yyyy")).format(d);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        return s2;
    }

同样,我还有其他两种方法可以返回 yyyyMM 和 dd 格式的数据??

这很好用,但看起来不太好

我的问题是我们可以只有一个实用程序满足我的要求吗?

4

5 回答 5

3

我的问题是我们可以只有一个实用程序满足我的要求吗?

我认为你从错误的方式开始。从根本上说,数据只是一个日期。您可以稍后在需要时应用格式。我建议你开始使用Joda Time并让你的方法返回一个LocalDate. 这捕获了所有真实信息,然后您可以随时使用三个单独DateTimeFormatter的对象来格式化值。

尽可能使用最自然地表示真实信息的类型来表示数据。尽早将您的数据转换为该自然格式,并保持该格式,直到您必须将其转换为其他内容(例如字符串)。

于 2012-05-28T14:57:07.390 回答
2

您可以定义一个方法并接收具有预期日期格式的字符串作为参数,具有格式的三个字符串可以定义为常量。

于 2012-05-28T14:56:50.620 回答
0

Apache Commons Lang库已经为您提供了实用方法。例如:

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
///
// first, convert the string to a date object
Date parsedDate = DateUtils.parseDate("2012-05-25T16:10:30.000", 
                                      new String[] {"yyyy-MM-dd'T'HH:mm:ss.SSS"});

// now, format the date object to a string, using different formats
String formattedDate = DateFormatUtils.format(parsedDate, "MM/yyyy");
String formattedDate2 = DateFormatUtils.format(parsedDate, "yyyyMM");

查看DateFormatUtilsDateUtils了解更多信息。

于 2012-05-28T15:17:10.580 回答
0

是的,您可以将这三种方法组合在一起,并使用附加参数(例如枚举)来指定您想要的输出格式。但我不会那样做。您的解决方案更清洁。为什么觉得不好看?

但是,我要做的是一劳永逸地将字符串转换为日期,并在任何地方使用日期而不是字符串,并使用您的 3 种方法之一转换日期(这会将日期作为参数而不是字符串)在需要时。

于 2012-05-28T14:58:58.287 回答
0

您可以只拥有一个具有三种方法的 Date 类。如下所示:

public class MyDate {

    private String date = null;

    public MyDate(String date) { 
        this.date = date;
    }

    public String getMonthYear() {
        return null;
    }

    public String getYearMonth() {
        return null;
    }

    public String getDay() {
        return null;
    }
}

您可以在构造函数中将字符串格式化为三个不同的字符串,然后在方法调用中返回这些字符串。如果您对同一日期字符串进行多次/重复调用,该实现会很好。或者你可以在方法调用中格式化字符串,如果你只做一次,但如果你只做一次,你可能想让类/方法静态并摆脱构造函数。

于 2012-05-28T15:03:22.537 回答