2013-03-12 42 views
2

我想使用Java和Joda Time來製作個人日程管理器。用戶一天中的某個時間段(例如,上午10點至下午4點),一個月中的每一天。他應該能夠從他的一天中提取一段時間,並在此期間「添加」一系列雜事(即字符串)。然後他將顯示他當天的剩餘部分。他可以從中抽出更多的時間,直到他沒有剩餘時間。他可以將提取的時間段添加回當天的時間表,並刪除該時段的所有雜事,即空閒時間。如何在喬達時間內將時間段分成幾個片段?

可以提取的時間片的大小由用戶決定。時間片的數量=一天中可用的總時間/用戶設置的時間片的大小=期望大小的時間片的數量+餘數時間

他可以將他的一天分成1小時,30分鐘,15分鐘,20分鐘,40分鐘等。

添加:用戶需要保存整個時間表,以便他能回來查看他過去在做什麼。每天的時間可以變化 - 上午10點至下午4點,上午9點至下午1點等

我是喬達時間的新手,我不知道這是可能的喬達時間,如果可能的話,是容易或繁瑣。我只需要一些指導。我並不是要求我輸入整個代碼。

在此先感謝。

+0

嗨,讀你的問題。在我看來,這是一個簡單的邏輯問題。似乎你不需要任何東西。除非我誤解你的問題。你只需要維護一個以每天小時數開始的靜態計數器,並且當用戶創建新事件時,可以從計數器中加上和減去小時。 – greenkode 2013-03-12 06:58:34

+0

@greenkode - 無靜態。用戶需要保存整個時間表,以便他可以回來查看他過去在做什麼。每天的時間可以變化 - 上午10點至下午4點,上午9點至下午1點等 – 2013-03-12 07:03:56

+0

我想你需要一個數據結構:一個開始時間,一個結束時間和一個字符串來標記事情要做。對? – longhua 2013-03-12 07:22:41

回答

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 
+0

想知道Period對象是否「意識到」自己的開始時間和結束時間。我在API中看不到像getStartDate()和getEndDate()這樣的方法,它可以返回用於創建此Period的DateTime-s。但是,我們擁有一段時間的組件的getter和setter。不知道爲什麼是這樣。期間只是看起來像一個不知道它的目的的差異或數字。例如-2可以表示1-3或7000-7002等。 – 2013-03-12 07:43:08

+0

@JediKnight我認爲你應該做一個新的數據結構來做到這一點。 – longhua 2013-03-12 07:53:42

+0

似乎是從期間重建日期的唯一方法是創建一個新的DateTime並使用Period get方法手動傳遞日期值,就像我在系統中一樣。查看更新代碼 – greenkode 2013-03-12 07:54:49

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); 
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; 
     }