2012-07-17 62 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