我想使用Java和Joda Time创建一个个人日程管理员。用户在一天中的某一时段(例如,上午10点至下午4点),对于一个月中的每一天。他应该能够从他那天开始提取一段时间,然后再添加"这个时期的家务(即字符串)清单。然后他将出示他那一天的剩余部分。他可以从中提取更多时期,直到他没有时间段。他可以将提取的时段添加回当天的时间表,并删除该时段的所有杂务,即空闲时间。
可以提取的时间片的大小由用户决定。时间片数=一天中可用的总时间/用户设置的时间片大小=所需大小的时间片数+剩余时间
他可以把他的一天分成1小时30分钟,15分钟,20分钟,40分钟等等。
ADDED:用户需要保存他的整个日程安排,以便他可以回来检查他过去在做什么。每天的时间可以变化 - 上午10点至下午4点,上午9点至下午1点等
我是Joda Time的新手,我不知道Joda Time是否可行,如果可能的话,这很容易或很麻烦。我只需要一些指导。我并不是要求为我输入整个代码。
提前致谢。
答案 0 :(得分:1)
这是更新后的代码
import java.util.ArrayList;
import java.util.List;
import org.joda.time.DateTime;
import org.joda.time.Period;
public class Schedule {
// figure out some way to Store these values in a database
static List<DateTime[]> schedule = new ArrayList<DateTime[]>();
//Number of hours in a day
static DateTime startDay = new DateTime(2013, 03, 12, 8, 0, 0);
static DateTime endDay = new DateTime(2013, 03, 12, 16, 0, 0);
//Create a Period from the start and End Day dates
static Period dayPeriod = new Period(startDay, endDay);
public static void main(String[] args) {
// These events will be created on your UI
DateTime[] firstEvent = { new DateTime(2013, 03, 12, 9, 0, 0), new DateTime(2013, 03, 12, 10, 0, 0) };
DateTime[] secEvent = { new DateTime(2013, 03, 12, 11, 0, 0), new DateTime(2013, 03, 12, 12, 0, 0) };
DateTime[] thirdEvent = { new DateTime(2013, 03, 12, 12, 0, 0), new DateTime(2013, 03, 12, 13, 0, 0) };
//print the hours left, before creating events
System.out.println(dayPeriod.getHours() + " : " + dayPeriod.getMinutes() + " : " + dayPeriod.getSeconds());
//Call a method to validate them
validateAndAdd(firstEvent);
validateAndAdd(secEvent);
validateAndAdd(thirdEvent);
//print the hours left after creating events
System.out.println(dayPeriod.getHours() + " : " + dayPeriod.getMinutes() + " : " + dayPeriod.getSeconds());
}
public static void validateAndAdd(DateTime[] event) {
//Subtract the event period from the Day Period
dayPeriod = dayPeriod.minus(new Period(event[0], event[1]));
schedule.add(event);
}
}
此次运行的输出是
8 : 0 : 0
5 : 0 : 0
但是,如果将firstEvent更改为
DateTime[] firstEvent = { new DateTime(2013, 03, 12, 9, 30, 0), new DateTime(2013, 03, 12, 10, 0, 0) };
运行的输出是
8 : 0 : 0
6 : -30 : 0
答案 1 :(得分:0)
要实现您描述的内容,您需要计算块长度并存储每个块的开始时间和结束时间。通过JodaTime,可以很容易地计算出一个块的开始时间和结束时间。它提供的API类似DateTime#plusHours(添加N小时),DateTime#plusMinutes(添加N分钟)。
例如:
DateTime beginTime = DateTime.now();
DateTime endTime = beginTime.plusMinutes(40);
System.out.println(beginTime);
System.out.println(endTime);
答案 2 :(得分:0)
方法在给定间隔内分割开始和结束。
private List<Interval> splitDateTime(long start, long end, int intervalNo) {
long interval = (end - start) / intervalNo;
List<Interval> list = new ArrayList<Interval>();
for (long i = start + interval; i < end; i += interval) {
list.add(new Interval(start, i));
start=start + interval;
}
list.add(new Interval(start, end));
return list;
}