Java 如何将从datepicker中选取的每个日期存储到Android上的内存或数据库中?
我已经创建了一个日期选择器,用户可以在其中使用borax12库选择起始日期和截止日期。这将打开一个对话框,用户可以在其中设置日期,当他们按“确定”时,它将在此方法中设置日期:Java 如何将从datepicker中选取的每个日期存储到Android上的内存或数据库中?,java,android,date,datepicker,Java,Android,Date,Datepicker,我已经创建了一个日期选择器,用户可以在其中使用borax12库选择起始日期和截止日期。这将打开一个对话框,用户可以在其中设置日期,当他们按“确定”时,它将在此方法中设置日期: @Override public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth,int yearEnd, int monthOfYearEnd, int dayOfMonthEnd) {
@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中,并存储到用户手机或数据库的内存中呢?在初始化类时,只需创建一个arraylist(
List=new arraylist()
),并在需要时使用List.add()。它将在列表中创建多个字符串实例
您可以保存到数据库或类似数据库(甚至保存到文件或服务器),以决定需要什么。在初始化类时,只需创建一个Arraylist(
List List=new Arraylist()
),并在需要时使用List.add()。它将在列表中创建多个字符串实例
您可以保存到数据库或类似数据库(甚至可以保存到文件或服务器),决定需要什么。Calendar类现在是遗留类,在Java中被Java.time类取代。对于Android,请参见下面的项目符号 对于没有时间和时区的仅日期值,请使用
LocalDate
LocalDate from = LocalDate.of( year , monthOfYear , dayOfMonth ) ;
要基于现有值获取新值,请使用。该类提供了几个方便的实现。显然你会想要的
对于Java,我建议使用在项目中找到的类跟踪这对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> ranges = new ArrayList<>() ;
ranges.add( dr ) ;
List ranges=new ArrayList();
范围。添加(dr);
对于存储。见&
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
日历类现在是遗留类,在Java中被Java.time类取代。对于Android,请参见下面的项目符号
对于没有时间和时区的仅日期值,请使用
LocalDate
LocalDate from = LocalDate.of( year , monthOfYear , dayOfMonth ) ;
要基于现有值获取新值,请使用。该类提供了几个方便的实现。显然你会想要的
对于Java,我建议使用在项目中找到的类跟踪这对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> ranges = new ArrayList<>() ;
ranges.add( dr ) ;
List ranges=new ArrayList();
范围。添加(dr);
对于存储。见&
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
谢谢,如果我使用SharedReferences,用户关闭手机上的所有应用程序,这些数据还会被存储吗?是的,这就是共享首选项的全部要点,即使用户关闭应用程序并重新打开,也会保留数据。如果即使卸载了应用程序也必须保留数据,请尝试将代码保留在文件(如果不是专用的,也可以从手机上的文件管理器中删除)或远程服务器上。谢谢,如果我使用SharedReferences,用户关闭手机上的所有应用程序,这些数据还会被存储吗?是,这就是共享首选项的全部要点,即使用户关闭应用程序并重新打开,也要保留数据。如果您必须保留数据,即使应用程序已卸载,请尝试将代码保留在文件(如果不是专用的,也可以从手机上的文件管理器中删除)或远程服务器上。几乎由同一作者复制相隔小时:几乎由同一作者复制相隔小时:谢谢,它看起来很好,我正在寻找它。我在任何地方都找不到它。我怎样才能在Android上将这三个额外的库编译成build.gradle?此外,如果我序列化Arraylist,如果用户关闭应用程序,是否仍可以访问该列表?@Samantha阅读我发布的链接。一个是关于如何使用ThreeTenABP的,另一个是关于序列化的。另外:&。啊,谢谢。那么三张十美元的钞票和另外三张十美元的钞票一样吗?我读到它与在android上使用Joda time基本相同@萨曼莎,我在这个回答中已经提到了这一点。我强烈建议你放慢脚步,多读书,少发帖。有关讨论,请参阅。谢谢您的帮助,它看起来不错,我正在寻找它。我到处都找不到。我怎么能编译这三个额外的libr呢