我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
我们正在创建一个日程安排应用程序,我们需要在白天代表某人的可用时间表,无论他们在哪个时区.以从约达时间的间隔,它代表了两个实例之间的绝对时间间隔的提示(开始包容性的,结束独家),我们创建了一个LocalInterval.LocalInterval由两个LocalTimes组成(开始包含,最终排他),我们甚至为Hibernate中的持久化做了一个方便的类.
例如,如果有人从下午1:00到下午5:00可用,我们将创建:
new LocalInterval(new LocalTime(13, 0), new LocalTime(17, 0));
Run Code Online (Sandbox Code Playgroud)
到目前为止一直很好 - 直到有人想在某天从晚上11点到午夜才有空.由于间隔结束是独占的,因此应该很容易表示:
new LocalInterval(new LocalTime(23, 0), new LocalTime(24, 0));
Run Code Online (Sandbox Code Playgroud)
确认!不行.这会抛出异常,因为LocalTime不能保持大于23的任何小时.
这对我来说似乎是一个设计缺陷--- Joda没有考虑到有人可能想要一个代表非包容性端点的LocalTime.
这真是令人沮丧,因为它在我们创造的非常优雅的模型中打了一个洞.
我有什么选择 - 除了分支Joda并在24小时内取出支票?(不,我不喜欢使用虚拟值的选项---比如23:59:59 ---代表24:00.)
更新:对于那些一直说不存在24:00的人,这里引用ISO 8601-2004 4.2.3注释2,3:"一个日历日[24:00]的结束与[00]重合:00]在下一个日历日的开始......"和"[hh]具有值[24]的表示仅优选代表时间间隔的结束...."
我有两个变量的时间段,从start_date到end_date。有没有一种简单的方法可以将它分成更小的时间段,将值四舍五入。
下面是一个例子:
我有从15.01.2016到 的时期10.06.2016。我想把它分成几个月,所以我会有六个时期:
01.01.2016 - 31.01.2016
01.02.2016 - 31.02.2016
01.03.2016 - 31.03.2016
01.04.2016 - 31.04.2016
01.05.2016 - 31.05.2016
01.06.2016 - 31.06.2016
Run Code Online (Sandbox Code Playgroud)
我想包括两者之间的时间01.01.2016,15.01.2016不管它不在原始时期。
我一直在寻找一些想法,但此时似乎唯一的方法是使用开始日期并使用 DateAndTime::Calculations 进行迭代以确定间隔的边界,直到达到结束日期。
android ×1
datetime ×1
intervals ×1
java ×1
jodatime ×1
localtime ×1
ruby ×1
threetenabp ×1
threetenbp ×1