2

我想使用 Java 和 Joda Time 制作一个个人日程管理器。对于一个月中的每一天,用户在一天中有一段时间(例如上午 10 点到下午 4 点)。他应该能够从他的一天中提取一个句点并将一个杂务列表(即字符串)“添加”到这个句点。然后他会看到他一天的剩余时间。他可以从中提取更多的时段,直到他没有剩余的时段。他可以将提取的时段添加回当天的日程安排,并删除该时段的所有杂务,即空闲时间。

可以提取的时间片的大小由用户决定。时间片数 = 一天中可用的总时间/用户设置的时间片大小 = 所需大小的时间片数 + 剩余时间

他可以将他的一天分成 1 小时、30 分钟、15 分钟、20 分钟、40 分钟等。

添加:用户需要保存他的整个日程安排,以便他可以回来查看他过去在做什么。每天的时间可以变化 - 上午 10 点至下午 4 点、上午 9 点至下午 1 点等

我是 Joda Time 的新手,我不知道这在 Joda Time 中是否可行,如果可能的话,是简单还是麻烦。我只需要一些指导。我不是要求为我输入整个代码。

提前致谢。

4

3 回答 3

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
于 2013-03-12T07:29:13.163 回答
1

方法在给定的时间间隔内拆分开始和结束。

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;
        }
于 2017-11-13T12:43:30.867 回答
0

为了实现您所描述的,您需要计算块长度并存储每个块的开始时间和结束时间。通过 JodaTime,可以很容易地计算出块的开始时间和结束时间。它提供了诸如DateTime#plusHours(加 N 小时)、DateTime#plusMinutes(加 N 分钟)之类的 API。

例如:

DateTime beginTime = DateTime.now();
DateTime endTime = beginTime.plusMinutes(40);
System.out.println(beginTime);
System.out.println(endTime);
于 2013-03-12T07:33:11.223 回答