2017-04-11 167 views
0

我有一個叫做Clock的微調器,它包含時間。但問題是我需要單獨使用所有數據,因爲該數據(月,日......將用於比較)。我有這個代碼,這個返回字符串的巨大奇怪行(Thu May 11 18:02:00 EEST 2017),我甚至不能分割和存儲到數組(只打印整行),也不寫入文件(只是空文件)。有沒有辦法從這個JSpinner獲得月,日,年?Java。如何從Jspinner獲得與java.util.Date關聯的月,年,日?

private void ClockStateChanged(javax.swing.event.ChangeEvent evt) {         

     Date date = (Date) Clock.getValue(); 
     System.out.print(date); 
     String dateString = null; 
     SimpleDateFormat sdfr = new SimpleDateFormat(""); 
     dateString = sdfr.format(date); 
     System.out.println(dateString); 

}

回答

0

TL增加;博士

myJavaUtilDate.toInstant() 
       .atZone(ZoneId.of("America/Montreal")) 
       .toLocalDate() 
       .toString() 

2017-01-23

日期 - 時間是字符串

不要混淆代表其值字符串的日期時間對象。日期時間對象可以通過解析字符串來創建。日期時間對象可以生成一個字符串來表示它的值。但字符串和日期 - 時間對象是不同的和分離的。所以日期時間對象不會「有格式」。

使用java.time

您使用的是舊的麻煩日期時間類(Date & Calendar)是現在的傳統,由java.time類取代。

如果數據源(Swing)未被更新爲直接處理java.time類型,則轉換。尋找新的轉換方法添加到舊的類。

Instant類表示UTCnanoseconds(最多9個(9)小數的位數)的分辨率在時間軸上的力矩。

Instant instant = myJavaUtilDate.toInstant() ; 

instant.toString():2017-01-23T06:23:45。678Z

java.util.DateInstant都是UTC。要確定日期,您必須指定一個時區。對於任何特定的時刻,日期在世界各地按區域而不同。例如,巴黎午夜過後的幾分鐘,法國是一個新的一天,而在魁北克蒙特利爾仍然是「昨天」。

continent/region的格式指定一個proper time zone name,如America/MontrealAfrica/Casablanca,或Pacific/Auckland。切勿使用3-4字母縮寫,如ESTIST,因爲它們是而不是真正的時區,不是標準化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of("America/Montreal") ; // Or ZoneId.systemDefault() 
ZonedDateTime zdt = instant.atZone(z); 

zdt.toString():2017-01-23T01:23:45.678 + 05:00 [美國/蒙特利爾]

現在可以提取日期唯一部分。 LocalDate類表示沒有時間和不帶時區的僅限日期的值。

LocalDate ld = zdt.toLocalDate(); 

你的問題不清楚你的目標。如果您只是要序列化此日期值以供以後比較,請以標準ISO 8601格式寫入文本。解析/生成字符串時,java.time類默認使用ISO 8601格式。

我建議你儘可能的堅持標準的ISO 8601字符串格式。它們旨在最大限度地減少歧義。它們很容易被機器解析。它們很容易被不同文化的人們閱讀。

String output = ld.toString() ; 

2017年1月23日

如果你想一年,一個月的各個部分,並請將dayOfMonth,詢問LocalDate對象。與傳統類不同,在java.time中,1月至12月的月份數目爲1-12。

int year = ld.getYear() ; 
int month = ld.getMonthValue() ; 
int dayOfMonth = ld.getDayOfMonth() ; 

您還可以獲得強大的Month枚舉對象的月份。

Month m = ld.getMonth(); 

關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore

0

嘗試使用日曆:

Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 
int month = cal.get(Calendar.MONTH); 
int year = cal.get(Calendar.YEAR); 
int day = cal.get(Calendar.DAY); 

更多關於日曆類在documentation

Calendar類是一個抽象類,可以爲 之間的轉換方法一個特定的時間點和一組日曆 個字段,如YEAR,MONTH,DAY_OF_MONTH,HOUR等等,以及用於操作日曆字段的 ,例如獲取下一個 周的日期。

2

使用日曆對象來獲取日,月和年

Calendar calendar = Calendar.getInstance(); 
calendar.setTime(date); 
int day = calendar.get(Calendar.DAY_OF_MONTH); 
int month = calendar.get(Calendar.MONTH) + 1; 
int year = calendar.get(Calendar.YEAR); 

的Calendar.MONTH從零開始,所以每月由1

相關問題