基本上我有一个日期存储为这种格式的文本:SQLite浏览器中的16/09/2014
。我想知道有没有办法在使用Java的数据库中的每个记录的一天,一周,一个月和一年之后获取日期。
我在listview中检索并显示从数据库中检索的日期:
viewHolder.txt_ddate.setText("Next Payment On: "
+ _recurlist.get(position).getRecurringStartDate().trim());
所以我想用Java技术来获取上面提到的日期。我已对此进行了研究并找到Documentation,但我不确定如何将其应用到我的问题中。
任何指南?提前谢谢。
答案 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)
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?