我创建了一个日期选择器,用户可以使用borax12库从中选择一个日期和迄今为止。这将打开一个对话框,用户可以在其中设置日期,当他们按下确定时,它会将日期设置为此方法:
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth,int yearEnd, int monthOfYearEnd, int dayOfMonthEnd) {
to.set(Calendar.YEAR, year);
to.set(Calendar.MONTH, monthOfYear);
to.set(Calendar.DAY_OF_MONTH, dayOfMonth);
from = Calendar.getInstance();
from.set(Calendar.YEAR, yearEnd);
from.set(Calendar.MONTH, monthOfYearEnd);
from.set(Calendar.DAY_OF_MONTH, dayOfMonthEnd);
String date = "You picked the following date: From- "+dayOfMonth+"/"+(++monthOfYear)+"/"+year+" To "+dayOfMonthEnd+"/"+(++monthOfYearEnd)+"/"+yearEnd;
dateTextView.append(new StringBuilder().append(date) + "\n");
}
这可以正常工作,因为日期会附加到dateTextView。但是,我如何每次将每个日期存储到一个arraylist中,并存储在用户手机或数据库的内存中?
答案 0 :(得分:2)
Calendar
类现在已经遗留下来了,java.time类在Java中取代了它。对于Android,请参阅下面的项目符号。
对于没有时间且没有时区的仅限日期的值,请使用LocalDate
。
LocalDate from = LocalDate.of( year , monthOfYear , dayOfMonth ) ;
要根据现有值获取新值,请使用TemporalAdjuster
。类TemporalAdjusters
提供了几个方便的实现。显然你会想要lastDayOfYear
。
LocalDate to = from.with( TemporalAdjusters.lastDayOfYear() ) ;
对于Java,我建议使用LocalDateRange
项目中的ThreeTen-Extra类来跟踪这对LocalDate
对象。但该代码并未反向移植到Android。您可能想要创建自己的该类的简单版本来组合该对。
package com.example.javatimestuff;
import org.threeten.bp.Duration;
import org.threeten.bp.LocalDate;
public class DateRange
{
private LocalDate start, stop;
// private Duration duration ; // Cache value if calling `getDuration` frequently.
// private String stringed ; // Cache value if calling `toString` frequently.
public DateRange ( LocalDate startArg , LocalDate stopArg )
{
this.start = startArg;
this.stop = stopArg;
}
public LocalDate getStart ()
{
return this.start;
}
public LocalDate getStop ()
{
return this.stop;
}
public Period toPeriod ()
{
Period p = Period.between( this.start , this.stop );
return p;
}
@Override
public String toString ()
{
// Per ISO 8601 standard.
// https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
String s = this.start.toString() + "/" + this.stop.toString();
return s;
}
static public LocalDate parse ( String input ) { // Obviously in real work you would make this safer: check for nulls, check for empty string, check for two parts, catch `DateTimeParseException`.
String[] parts = input.split( "/" );
LocalDate start = LocalDate.parse( parts[0]) ;
LocalDate stop = LocalDate.parse( parts[1]) ;
DateRange dr = new DateRange(start , stop ) ;
return dr ;
}
}
通过构造函数调用该类。
DateRange dr = new DateRange( from , to ) ;
存储List
类型DateRange
,我们的自定义类。
List<DateRange> ranges = new ArrayList<>() ;
ranges.add( dr ) ;
对于存储,serialize the List
。请参阅:Wikipedia&amp; Oracle Tutorial
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
答案 1 :(得分:0)
在初始化类时,只需创建一个Arraylist(List<String> list= new Arraylist()
),并在需要时使用list.add()。它将在列表中创建多个字符串实例。
您可以保存到SharedPreferences或像SqLite这样的数据库(甚至是文件或服务器),确定您想要的内容。