2012-07-17 36 views
-2

我需要使用日期,並且我不確定如何在Java中執行此操作,因爲我從來沒有這樣做過。在Java中使用日期

我從Excel文件中提取日期,並且可以用表示日期的數據格式檢索它們。

例:

  1. 2010/2/1
  2. 2011/5/12
  3. 2011/8/15
  4. 2011/9/1
  5. 2011/9/1

我的所有代碼都是非常不合適的問題,但我設置了一個getter/setter方法:

public Date getDate() { 
    return date; 
} 

public void setDate(Date date) { 
    this.date = date; 
} 

所以我的問題是這樣的,在什麼樣的方式,當我從Excel把數據:

temp.setDate((row.getCell(3).getDateCellValue()); 

我可以設定上限,從而使其只檢索從幾個月的X量的數據。 8,12等等,從文件中顯示的上個月/年開始,而不是一直回到2010年?如果需要,我可以提供更多細節。

編輯:這是我現在有:

import java.util.Date; 
    Date date; 
    date = row.getCell(3).getDateCellValue(); 

它顯示:週二06月01日00:00:00

我不在乎週二或00:00:00,我只是有一個完整的數據列表,我只想顯示x個月的數量。

編輯:我想通了。 :)

+1

你的問題很不清楚,我不明白你想達到什麼目的,你也不會說這個'Data'類是什麼。 – 2012-07-17 14:23:16

+0

沒有數據類,我只想存儲日期的值是從Excel的數據格式,還是會字符串更容易? – user1452530 2012-07-17 14:28:11

+0

等等,「數據」只是重複的「日期」輸入錯誤,還是實際上在這裏使用了「數據」類型? – 2012-07-17 14:44:34

回答

0

您有DateFormat.class工作FO解析細胞,或使用日曆把月日

編輯

您還可以使用Calendar.class

final String[] tabDate = {"2/1/2010", "5/12/2011", "8/15/2011", 
          "9/1/2011", "9/1/2011"}; 
// Extract field's value 
final Calendar c = Calendar.getInstance(); 

// Parse the list of stringDate 
for (final String string : tabDate) { 
    System.out.println("Input string: " + string); 
    final String[] shortDate = string.split("/"); 

    // Build Calendar 
    c.set(Integer.valueOf(shortDate[2]), Integer.valueOf(shortDate[0]), 
     Integer.valueOf(shortDate[1])); 

    // Extract date as you like 
    System.out.format("%25s : %d/%d/%d\t%s\n\n", c.getTime(), 
     c.get(Calendar.MONTH), c.get(Calendar.DATE), 
     c.get(Calendar.YEAR), c.getTimeInMillis()); 
} 

控制檯:

Input string: 2/1/2010 
Mon Mar 01 09:09:48 CET 2010 : 2/1/2010 1267430988109 

Input string: 5/12/2011 
Sun Jun 12 09:09:48 CEST 2011 : 5/12/2011 1307862588109 

Input string: 8/15/2011 
Thu Sep 15 09:09:48 CEST 2011 : 8/15/2011 1316070588109 

Input string: 9/1/2011 
Sat Oct 01 09:09:48 CEST 2011 : 9/1/2011 1317452988109 

Input string: 9/1/2011 
Sat Oct 01 09:09:48 CEST 2011 : 9/1/2011 1317452988109 
+0

你能告訴我一個快速解析它的方法嗎?它是(日期?),因爲現在寫它不會讓我用字符串做,而使用雙重顯示一個奇怪的值。沒關係,我明白了。 df.parse(myString),但我仍然想如何比較它,只得到最後的x個月? – user1452530 2012-07-17 14:36:00

+0

@ user1452530 c.get(Calendar.MONTH)爲您提供當年的最後一個月。如果您正在尋找最近五個月的時間段:您可以創建一個日曆,其中包含期間的開始日期,並比較c.getTimeInMillis()。 – 2012-07-18 07:22:04

0

這個問題非常含糊,但如果您使用Excel,我發現將文件另存爲'filename.csv'非常有用。這種格式非常易於使用,它以逗號分隔,並且換行符下降。如果您定期檢查該月份,則很容易確保您僅向後退出x個月。

+0

文件已經以excel格式存在,而且我正在使用多個東西,它只是困擾着我的日期。他們被列爲m /日/年是字符串還是整數? – user1452530 2012-07-17 14:32:24

+0

看起來好像是一個字符串,如果你使用StringTokenizer類,當你以m/day/year的形式取得字符串時,你可以把它分成三個字符串m,day和year,然後把這些字符串轉換成整數。 – Jbad26 2012-07-17 14:36:10

+0

好的,這似乎是一個可行的方法。 – user1452530 2012-07-17 14:47:08

0

首先,您需要使用SimpleDateFormat類來相應地分析日期。結果是一個日期對象。

SimpleDateFormat df = new SimpleDateFormat("M/d/yyyy"); 
Date date = df.parse(row.getCell(3).getDateCellValue()); 

然後:

Calendar cal = Calendar.getInstance(); 

將返回對象ob型日曆,在那裏你可以通過

cal.setTime(date); 

設定日期最後的循環讀取Excel文件可根據確定日曆對象,如果日期應該包括/進一步處理使用:

int month = cal.get(Calendar.MONTH); // e.g. 11 for Nov 
int year = cal.get(Calendar.YEAR); // e.g. 2011 
+0

這是說,日期格式類型的解析(字符串)方法不適用於參數(日期)。 – user1452530 2012-07-17 14:52:33

+0

'getDateCellValue'已經返回一個'Date' - OP沒有詢問解析。 – 2012-07-17 14:56:59