【问题标题】:Best way to define Java constant dates定义 Java 常量日期的最佳方法
【发布时间】:2011-11-01 01:49:18
【问题描述】:

我想定义一些常量,特别是在我的域存在之前的日期和日历。我有一些有效的代码,但它很难看。我正在寻找改进建议。

    static Calendar working;
    static {
        working = GregorianCalendar.getInstance();
        working.set(1776, 6, 4, 0, 0, 1);
    }
    public static final Calendar beforeFirstCalendar = working;
    public static final Date beforeFirstDate = working.getTime();

我将它们设置为 1776 年 7 月 4 日。 我宁愿根本没有“工作”变量。

谢谢

【问题讨论】:

  • 请注意,将其设为final 并不能使其成为不可变的。您可能想查看 JodaTime,它的 DateTime 是不可变的,可以按预期安全地声明为 final

标签: java date calendar constants


【解决方案1】:

我不确定我是否理解....但这不起作用吗?

public static final Calendar beforeFirstCalendar;
static {
    beforeFirstCalendar = GregorianCalendar.getInstance();
    beforeFirstCalendar.set(1776, 6, 4, 0, 0, 1);
}
public static final Date beforeFirstDate = beforeFirstCalendar.getTime();

【讨论】:

  • 您甚至可以将static {} 的第一行放回声明中以保存一行代码:public static final Calendar beforeFirstCalendar = Calendar.getInstance(); 这不是一个不可变的类,您仍然可以在任何地方编辑它(以及final 在这方面确实没有任何变化)。
【解决方案2】:

我会将它提取到一个方法中(在一个 util 类中,假设其他类也需要这个):

class DateUtils {
  public static Date date(int year, int month, int date) {
    Calendar working = GregorianCalendar.getInstance();
    working.set(year, month, date, 0, 0, 1);
    return working.getTime();
  }
}

那么简单,

public static final Date beforeFirstDate = DateUtils.date(1776, 6, 4);

【讨论】:

    【解决方案3】:

    使用 XML 字符串表示法可能更清楚。这更易于阅读,也避免了您想要消除的局部变量:

    import javax.xml.bind.DatatypeConverter;
    
    Date theDate = DatatypeConverter.parseDateTime("1776-06-04T00:00:00-05:00").getTime()
    

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多