2011-11-01 17 views
4

我想定義一些常量,特別是在我的域可以存在之前的日期和日曆。我有一些可行的代碼,但它的醜陋。我正在尋找改進建議。 定義Java常量日期的最佳方法

 
    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日。 我寧願沒有「工作」變量。

謝謝

+2

請注意,使它成爲'final'不會使它不可變。你可能想要看看JodaTime,它的'DateTime'是不可變的,可以按照預期安全地聲明爲'final'。 – BalusC

回答

4

我不知道我明白....但不是這項工作?

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

謝謝,那個作品 – fishtoprecords

+0

你甚至可以把第一行的'static {}'放回到聲明中以保存一行代碼:'public static final Calendar beforeFirstCalendar = Calendar.getInstance();'它不是一個不可變的類,你仍然可以在任何地方進行編輯(在這方面「最終」變化真的沒有)。 – BalusC

5

我將它解壓到一個方法(在一個實用程序類,假設其他類會想這個問題,以及):

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); 
1

使用XML字符串符號可能會更清晰。這是更人性化的可讀性,也避免了你想要消除的局部變量:

import javax.xml.bind.DatatypeConverter; 

Date theDate = DatatypeConverter.parseDateTime("1776-06-04T00:00:00-05:00").getTime()