2015-10-16 72 views
-1

有誰知道爲什麼我的日曆對象不斷打印3月份作爲月份和1年份?有沒有辦法將日曆設置爲當前的月份和日期?日曆對象不斷打印3月份作爲月份和1年份

import java.util.Date; 
import java.util.GregorianCalendar; 
import javafx.application.Application; 

public class Calendar extends Application{ 
    @Override 
    public void start(Stage stage) throws Exception { 
    BorderPane pane = new BorderPane(); 

    // Create a calendar 
    GregorianCalendar calendar = new GregorianCalendar(); 
    Date time = new Date(); 
    calendar.setTime(time); 

    // Create title 
    Text header = new Text(getMonth(calendar.MONTH) + ", " + calendar.YEAR); 

    // place title in pane 
    pane.setTop(header); 
    BorderPane.setAlignment(header, Pos.CENTER); 

    Scene scene = new Scene(pane); 
    stage.setScene(scene); 
    stage.show(); 
} 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+4

什麼是'得到月(...)'?如果你使用'Calendar',你需要使用像'calendar.get(Calendar.MONTH)'和'calendar.get(Calendar.YEAR)''的代碼。如果您使用的是Java 8,則不應該使用'Calendar',而應該使用['LocalDate'](http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html )。 –

+0

@Rachel請在發佈之前刪除您的代碼,以顯示您的問題所需的[絕對最小值](http://stackoverflow.com/help/mcve)。 JavaFX的東西與您對日期時間的問題無關。 –

回答

0

java.time

順便說一句,這樣的工作是在java.time框架現在內置的Java 8和更高版本要容易得多。這些新類取代了已證明非常麻煩的舊java.util.Date/.Calendar類。

確定今天的日期。

ZoneId zoneId = ZoneId.of ("America/Montreal"); 
LocalDate today = LocalDate.now (zoneId); 

使用某種格式生成該日期對象的字符串表示形式。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("M, yyyy"); 
String output = today.format (formatter); 

更好的是,生成本地化格式的字符串表示。

DateTimeFormatter formatterLocalized = DateTimeFormatter.ofLocalizedDate (FormatStyle.FULL).withLocale (Locale.CANADA_FRENCH); 
String outputLocalized = today.format (formatterLocalized); 

轉儲到控制檯。

System.out.println ("today: " + today + " is: " + output + " which in localized format is: " + outputLocalized); 

運行時。

今天:2015年10月17日:10,2015年其在本地化的格式是:samedi 17 OCTOBRE 2015年

+0

這正是我需要的!我正在使用Java 8,所以Calendar和Date類沒有做我所需要的。 – Rachel

+0

另一個問題,有沒有辦法找出本月開始的一週中的哪一天?例如,2015年10月的答案將是星期四,因爲10月1日星期四開始。 – Rachel

+0

@Rachel評論是不是有其他問題的地方。首先搜索StackOverflow,看看你的新問題是否已經發布(它有*,*倍*倍)。如果還沒有問,請發新問題。 –

2
Text header = new Text(getMonth(calendar.get(Calendar.MONTH) 
     + ", " + calendar.get(Calendar.YEAR)); 

的Calendar.get方法使用INT常數,以獲得特定月/年場。 記住那個月是我相信從0開始計算的。

Java 8的數據/時間類更好(雖然在開始時有點壓倒性)。

0

編輯給予更多的解釋:

獲取和日曆對象上設置的方法將期望場數/職位,返回值,而且這些號碼被定義爲常量,比如月,年,日,DAY_OF_MONTH

所以,當你使用calendar.Month它只會返回你的字段數值而不是實際的月份。您需要使用get/set方法來獲取日曆實例中的實際值。

Text header = new Text(getMonth(calendar.get(Calendar.MONTH) + ", " + calendar.get(Calendar.YEAR)); 
+1

請添加一些解釋。賦予基礎邏輯比賦予代碼更重要,因爲它可以幫助OP和其他讀者自己解決這個問題和類似的問題。 –