在Java中获取一段时间后的日期

时间:2014-09-16 13:37:57

标签: java android sqlite date

基本上我有一个日期存储为这种格式的文本:SQLite浏览器中的16/09/2014。我想知道有没有办法在使用Java的数据库中的每个记录的一天,一周,一个月和一年之后获取日期。

我在listview中检索并显示从数据库中检索的日期:

viewHolder.txt_ddate.setText("Next Payment On: "
                + _recurlist.get(position).getRecurringStartDate().trim());

所以我想用Java技术来获取上面提到的日期。我已对此进行了研究并找到Documentation,但我不确定如何将其应用到我的问题中。

任何指南?提前谢谢。

5 个答案:

答案 0 :(得分:2)

使用类似示例的Calendar对象,它提供了add方法。

String dateAsString = "16/09/2014";
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Calendar c = Calendar.getInstance();
c.setTime(formatter.parse(dateAsString));

c.add(Calendar.DAY_OF_MONTH, 1);
System.out.println("After one day: " + formatter.format(c.getTimeInMillis()));
c.add(Calendar.DAY_OF_MONTH, -1);

c.add(Calendar.WEEK_OF_YEAR, 1);
System.out.println("After one week: " + formatter.format(c.getTimeInMillis()));
c.add(Calendar.WEEK_OF_YEAR, -1);

c.add(Calendar.MONTH, 1);
System.out.println("After one month: " + formatter.format(c.getTimeInMillis()));
c.add(Calendar.MONTH, -1);

c.add(Calendar.YEAR, 1);
System.out.println("After one year: " + formatter.format(c.getTimeInMillis()));
c.add(Calendar.YEAR, -1);

输出:

After one day: 17/09/2014
After one week: 23/09/2014
After one month: 16/10/2014
After one year: 16/09/2015

答案 1 :(得分:1)

使用Joda-time

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("16/09/2014", formatter);

System.out.println(date.toString(formatter));
System.out.println(date.plusDays(1).toString(formatter));
System.out.println(date.plusWeeks(1).toString(formatter));
System.out.println(date.plusMonths(1).toString(formatter));
System.out.println(date.plusYears(1).toString(formatter));

输出:

16/09/2014
17/09/2014
23/09/2014
16/10/2014
16/09/2015

答案 2 :(得分:1)

使用Java / Android的Calendar api如下:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

Date date;

try {
    date = sdf.parse(dateStr);
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.DAY_OF_MONTH, 1); //add one day to your date
    cal.add(Calendar.MONTH, 1); //add 1 month to your date 
    cal.add(Calendar.YEAR, 1); //add 1 year to current date
    System.out.println(sdf.format(cal.getTimeInMillis()));
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

答案 3 :(得分:0)

以下是示例:

String strDate = "16/09/2014";
int noOfDays = 1;
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(strDate);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, noOfDays);

答案 4 :(得分:0)

TL;博士

LocalDate.parse( 
    "16/09/2014" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
)
.plusDays( 1 )
.format( DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) )

详细

提示:将日期时间数据类型用于日期时间值。您应该使用面向日期的类型来定义数据库中的列,以存储日期值而不是文本。

提示#2:将日期值序列化为文本时,请使用标准ISO 8601格式。这些是合理的,实用的,按字母顺序按时间顺序排序。

使用java.time类而不是现在遗留的麻烦的旧日期时间类。对于Android,请参阅下面的项目符号。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( "16/09/2014" , f ) ;

LocalDate dayAfter = ld.plusDays( 1 ) ; 
LocalDate weekAfter = ld.plusWeeks( 1 ) ;
LocalDate monthAfter = ld.plusMonths( 1 ) ;
LocalDate yearAfter = ld.plusYears( 1 ) ;

要以标准格式生成字符串,只需调用toString

String output = dayAfter.toString() ;  // YYYY-MM-DD standard format.
  

2014年9月17日

对于其他格式,请使用上面的DateTimeFormatter

String output = dayAfter.format( f ) ;  
  

17/09/2014

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?