避免j.u.Date
第一個錯誤是使用與Java捆綁java.util.Date和.Calendar類。他們是非常麻煩的。避免它們。
使用體面的日期時間庫。在Java中,這意味着無論是:在Java中8(由喬達時間的啓發)
兩者都有自己的優點和缺點。
兩者均提供LocalDate
類,您只需表示一個不含日期的部分即可。
日期,時間與文本
問題的代碼融合了他們的字符串表示日期時間值。最好使用日期時間值完成工作。之後,分別創建用於呈現給用戶的字符串表示形式。這個想法是一個separation of concerns,使您的代碼更清晰,更容易測試/調試。
Joda-Time
Java-Time中的示例代碼。
您必須指定一週中的哪些日子爲營業日。
請注意使用時區。當前日期取決於您在地球上的位置(時區)。巴黎的一個新日子早於蒙特利爾。如果您省略時區,則應用JVM的默認值。更好地指定,即使通過調用getDefault()
,也不要依賴隱式默認值。
首先我們收集所需日期時間值的集合。
int requiredCountOfDays = 10; // The Question demands 10 previous working days.
List<LocalDate> days = new ArrayList<LocalDate>(requiredCountOfDays); // Collect desired LocalDate objects.
DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris"); // Specify time zone by which to get current date.
LocalDate today = LocalDate.now(timeZone); // Get the current date at this moment in specified time zone.
LocalDate localDate = today; // Define var to decrement for previous days.
while (days.size() < requiredCountOfDays) { // Loop until we fill the list (10 elements).
localDate = localDate.minusDays(1); // Decrement to get previous day.
// Hard-code what days are business days vs weekend days.
boolean isWeekend = ((localDate.getDayOfWeek() == DateTimeConstants.SATURDAY) || (localDate.getDayOfWeek() == DateTimeConstants.SUNDAY)); // Hard-coding for weekend because it is easier to type than coding for the more numerous week days.
if (!isWeekend) { // If business day…
days.add(localDate); // …collect this day.
}
}
之後,我們以本地化的字符串格式顯示這些值。
List<String> daysOfWeek = new ArrayList<String>(days.size()); // Collect the same number of LocalDate objects, rendered as Strings.
DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE"); // Generate name of day-of-week, abbreviated.
for (LocalDate day : days) {
String dayOfWeek = formatter.print(day); // Generate String representation.
daysOfWeek.add(dayOfWeek); // Collect the string.
}
轉儲到控制檯...
System.out.println("days: " + days);
System.out.println("daysOfWeek: " + daysOfWeek);
當運行...
days: [2014-06-18, 2014-06-17, 2014-06-16, 2014-06-13, 2014-06-12, 2014-06-11, 2014-06-10, 2014-06-09, 2014-06-06, 2014-06-05]
daysOfWeek: [Wed, Tue, Mon, Fri, Thu, Wed, Tue, Mon, Fri, Thu]
要編寫的代碼
?什麼阻止你嘗試?我的建議是:首先學習Java,至少足夠好以便能夠編寫它 – Stultuske
好的。祝一切順利。請繼續。讓我們知道你是否陷入中間。 –
公共假期呢? –