Jodatime 以下SimpleDataFormat语句的Joda时间等价物

Jodatime 以下SimpleDataFormat语句的Joda时间等价物,jodatime,simpledateformat,Jodatime,Simpledateformat,你能帮我做这个吗 我读到joda time比JDK的Date/Calendar/DateFormat类轻得多 Joda time显然是由大量基于数字的类组成的,因此与JDK的同类产品相比,它的大多数类的创建和存储都“便宜” 所以,当我在《Joda time》上阅读时,你能给我下面的SimpleDateFormat语句吗 private static final String Y_M_D = "yyyy-MM-dd "; private static final String W_

你能帮我做这个吗

我读到joda time比JDK的Date/Calendar/DateFormat类轻得多

Joda time显然是由大量基于数字的类组成的,因此与JDK的同类产品相比,它的大多数类的创建和存储都“便宜”

所以,当我在《Joda time》上阅读时,你能给我下面的SimpleDateFormat语句吗

    private static final String Y_M_D = "yyyy-MM-dd ";
    private static final String W_M_D = "EEE, MMM d ";
    private static final String W_Y_M_D = "EEE, yyyy-MM-dd ";
    private static final String HOURS_12 = " h:mm a";
    private static final String HOURS_24 = " HH:mm";

    private static final DateFormat mDateFormat = new SimpleDateFormat(Y_M_D);

    private static final DateFormat mDayFormat = new SimpleDateFormat(W_M_D);

    private static final DateFormat mW_Y_M_D12HrFormat = new SimpleDateFormat(W_Y_M_D + HOURS_12);

    private static final DateFormat m12DateTimeFormat = new SimpleDateFormat(W_M_D + HOURS_12);

//    private static final DateFormat m24DateTimeFormat = new SimpleDateFormat(W_M_D + HOURS_24);

    private static final DateFormat m12TimeFormat = new SimpleDateFormat(HOURS_12);

//    private static final DateFormat m24TimeFormat = new SimpleDateFormat(HOURS_24);

    // This is the format to store in the database not necessarily to display.
    private static final DateFormat mStoredFormat = new SimpleDateFormat(Y_M_D + HOURS_12);

    // Used to convert strings to Epoch
    private static final DateFormat mEpochFormat = new SimpleDateFormat(Y_M_D + HOURS_24);

更好的是,也许你们中的一些人编写了最终的datetime“parser”,从一个提供的原始字符串(例如:“yyyy-MM-dd-HH:MM”)转换为多种格式模式(如上面列出的那些)。在这里查找性能,您会看到。

关于性能和内部存储格式:

如果您仔细阅读和研究性能系列文章,就会发现构建和存储长基类的成本很低。最便宜的类型确实是
java.util.Date

但是等待:CPU资源的主要消耗发生在其他地方,即通过将如此长的数字转换为字段元组(使用公历规则等)或内部锁定(例如通过访问同步的可变时区状态)

Joda-
LocalDate
对年、月和月日使用长元组而不是整数元组这一事实并不理想,因为格式化非常需要元组而不是长元组。新的
java.time.LocalDate
类采用了元组格式,这是一种改进。所以我对《乔达时代》的表演不会太热情。它只比
java.util.GregorianCalendar
更好

关于您的
SimpleDateFormat
-常量

非常令人震惊的是,您为类使用了常量,如
SimpleDateFormat
,它不是线程安全的。但好消息是Joda Time有自己的格式引擎,它可以生成不可变的,因此线程安全的格式化程序。因此,与您实际拥有的相比,您打算进行的迁移是一个明显的改进

Joda Time的格式化程序类称为
DateTimeFormatter
。它还接受模式字符串。虽然模式方言不同,但至少可以转移问题1:1中提到的模式。例如:

   // old:  private static final DateFormat mDayFormat = new SimpleDateFormat(W_M_D);

   // new:  private static final DateTimeFormatter mDayFormat =
              DateTimeFormat.forPattern(W_M_D);

当然,在大多数情况下,您必须适应其他更改,主要是更改格式化程序上的方法调用,例如,您调用
format(…)
而不是
print(…)
,以下是JODA time中的等效代码:

private static final DateTimeFormatter mDateFormat = DateTimeFormat.forPattern("yyyy-MM-dd");
private static final DateTimeFormatter mDayFormat = DateTimeFormat.forPattern("EEE, MMM d");
private static final DateTimeFormatter mW_Y_M_D12HrFormat = DateTimeFormat.forPattern("EEE, yyyy-MM-dd h:mm a");
private static final DateTimeFormatter m12DateTimeFormat = DateTimeFormat.forPattern("EEE, MMM d h:mm a");
private static final DateTimeFormatter m12TimeFormat = DateTimeFormat.forPattern("h:mm a");

private static final DateTimeFormatter mStoredFormat = DateTimeFormat.forPattern("yyyy-MM-dd h:mm a");
private static final DateTimeFormatter mEpochFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm");

您提到了性能,因此避免使用太多的字符串声明和字符串连接,因为这会消耗内存。

谢谢您的时间。