Java 在Android中使用“日历”指定日期时间范围
社会各界, 我目前正在做我的新项目,我是Java和Android Studio的新手。 我用两个日历变量编写了自己的Entry类。 是否有一种更短更干净的方法来创建新的条目对象,如下面的代码所示Java 在Android中使用“日历”指定日期时间范围,java,android,datetime,arraylist,calendar,Java,Android,Datetime,Arraylist,Calendar,社会各界, 我目前正在做我的新项目,我是Java和Android Studio的新手。 我用两个日历变量编写了自己的Entry类。 是否有一种更短更干净的方法来创建新的条目对象,如下面的代码所示 //MainActivity.java //.... private ArrayList<Entry> initEntrys() { ArrayList<Entry> list = new ArrayList<>(); Cale
//MainActivity.java
//....
private ArrayList<Entry> initEntrys() {
ArrayList<Entry> list = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
Calendar mStartDate = calendar;
Calendar mEndDate = calendar;
mStartDate.set(2019, 12, 20, 7, 0);
mEndDate.set(2019, 12, 20, 10, 0);
list.add(new Entry(mStartDate, mEndDate));
return list;
}
任何帮助都将不胜感激 tl;博士
切勿使用传统日期时间类,如日历。仅使用java.time类
对于包含一天中某个时间但缺少时区或UTC偏移量的日期,请使用类
避免遗留日期时间类
不要使用日历。那门课很糟糕,设计上有缺陷。多年前,JSR310中定义的现代java.time类取代了它
java.time
与遗留类相比,java.time类在设计上是不可变的,因此是线程安全的
我们通过调用静态工厂方法来实例化java.time对象,而不是将构造函数用于new
一刻也不
如果您有意识地在没有或上下文的情况下工作,请使用对象
片刻
如果您试图表示时间轴上的时刻、特定点,那么是错误的类
对于跟踪时刻,您需要时区的上下文,或者更确切地说,需要UTC的偏移量。为此,请使用中所示的
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
该项目现已启动,建议迁移到类
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*类
从哪里获得java.time类
、和更高版本-标准Java API的一部分,带有捆绑实现。
Java9添加了一些次要功能和修复。
和
大多数java.time功能都在中向后移植到Java6和Java7。
更高版本的Android捆绑包实现了java.time类。
对于早期的Android tl;博士
切勿使用传统日期时间类,如日历。仅使用java.time类
对于包含一天中某个时间但缺少时区或UTC偏移量的日期,请使用类
避免遗留日期时间类
不要使用日历。那门课很糟糕,设计上有缺陷。多年前,JSR310中定义的现代java.time类取代了它
java.time
与遗留类相比,java.time类在设计上是不可变的,因此是线程安全的
我们通过调用静态工厂方法来实例化java.time对象,而不是将构造函数用于new
一刻也不
如果您有意识地在没有或上下文的情况下工作,请使用对象
片刻
如果您试图表示时间轴上的时刻、特定点,那么是错误的类
对于跟踪时刻,您需要时区的上下文,或者更确切地说,需要UTC的偏移量。为此,请使用中所示的
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
该项目现已启动,建议迁移到类
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*类
从哪里获得java.time类
、和更高版本-标准Java API的一部分,带有捆绑实现。
Java9添加了一些次要功能和修复。
和
大多数java.time功能都在中向后移植到Java6和Java7。
更高版本的Android捆绑包实现了java.time类。
对于早期的Android我将尝试使用类覆盖时间分区日期来完成
我在示例中使用了UTC时区,但您可以使用所需的适当时区进行自定义
LocalDateTime ldtStart = LocalDateTime.of( 2019 , 12 , 20 , 7 , 0 , 0 , 0 ) ;
ZonedDateTime ldtZonedStart = ldtStart.atZone(ZoneId.systemDefault());
ZonedDateTime utcZonedStart = ldtZonedStart.withZoneSameInstant(ZoneOffset.UTC);
LocalDateTime ldtStop = LocalDateTime.of( 2019 , 12 , 20 , 10 , 0 , 0 , 0 ) ;
ZonedDateTime ldtStopZoned = ldtStop.atZone(ZoneId.systemDefault());
ZonedDateTime utcZonedStop = ldtStopZoned.withZoneSameInstant(ZoneOffset.UTC);
我将尝试通过使用该类覆盖时间分区日期来完成
我在示例中使用了UTC时区,但您可以使用所需的适当时区进行自定义
LocalDateTime ldtStart = LocalDateTime.of( 2019 , 12 , 20 , 7 , 0 , 0 , 0 ) ;
ZonedDateTime ldtZonedStart = ldtStart.atZone(ZoneId.systemDefault());
ZonedDateTime utcZonedStart = ldtZonedStart.withZoneSameInstant(ZoneOffset.UTC);
LocalDateTime ldtStop = LocalDateTime.of( 2019 , 12 , 20 , 10 , 0 , 0 , 0 ) ;
ZonedDateTime ldtStopZoned = ldtStop.atZone(ZoneId.systemDefault());
ZonedDateTime utcZonedStop = ldtStopZoned.withZoneSameInstant(ZoneOffset.UTC);
在执行mStartDate=calendar和mEndDate=calendar时,将它们指定给相同的引用。这意味着,两个对象都包含相同的内容,设置频率没有区别。@dan1st我只是想知道是否不能创建类似list的内容。addnew Entrynew Calendar2019,12,20,10,12,45,..您可以创建一个帮助器方法来为您工作。这是您认为最好的方法还是创建DateTime类?不要创建自己的date/time类。如答案中所述,使用java.time。在执行mStartDate=calendar和mEndDate=calendar时,将它们指定给相同的引用。这意味着,两个对象都包含sa
我很满意,设置频率没有什么区别。@dan1st我只是想知道是否不能创建类似列表的内容。addnew Entry新日历2019、12、20、10、12、45、,..您可以创建一个帮助器方法来为您工作。这是您认为最好的方法还是创建DateTime类?不要创建自己的date/time类。使用答案中解释的java.time。
LocalDateTime ldtStart = LocalDateTime.of( 2019 , 12 , 20 , 7 , 0 , 0 , 0 ) ;
ZonedDateTime ldtZonedStart = ldtStart.atZone(ZoneId.systemDefault());
ZonedDateTime utcZonedStart = ldtZonedStart.withZoneSameInstant(ZoneOffset.UTC);
LocalDateTime ldtStop = LocalDateTime.of( 2019 , 12 , 20 , 10 , 0 , 0 , 0 ) ;
ZonedDateTime ldtStopZoned = ldtStop.atZone(ZoneId.systemDefault());
ZonedDateTime utcZonedStop = ldtStopZoned.withZoneSameInstant(ZoneOffset.UTC);