如何将从datepicker中挑选的每个日期存储到Android上的内存或数据库中?

时间:2017-09-03 12:01:34

标签: java android date datepicker

我创建了一个日期选择器,用户可以使用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中,并存储在用户手机或数据库的内存中?

2 个答案:

答案 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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

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

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

从哪里获取java.time类?

答案 1 :(得分:0)

在初始化类时,只需创建一个Arraylist(List<String> list= new Arraylist()),并在需要时使用list.add()。它将在列表中创建多个字符串实例。

您可以保存到SharedPreferences或像SqLite这样的数据库(甚至是文件或服务器),确定您想要的内容。