1. 程式人生 > 實用技巧 >會議室計費實現

會議室計費實現

需求:在規定時間段內收費(7:00 - 22:00),其餘時間不收費

程式碼實現:

 1 package Others;
 2 
 3 import java.time.Duration;
 4 import java.time.LocalDateTime;
 5 
 6 /**
 7  * @Author MrNiurh
 8  * @Date Creat in 2020/12/22
 9  * @Description 會議室計費
10  * @See <a href="https://github.com/MrNiurh?tab=repositories">github</a>
11  */
12 public class MoneyCount { 13 14 // 會議室計費開啟時間 15 private final static int startHour = 7; 16 // 會議室計費關閉時間 17 // 只在此時間內計費 18 private final static int endHour = 22; 19 20 // 會議室價格/每小時 21 private final static double moneyPerHour = 40.0; 22 23 24 public static void main(String[] args) {
25 getMoney(); 26 27 } 28 29 30 /** 31 * 計算會議室收費 32 * 33 * @return double 34 */ 35 private static double getMoney() { 36 37 // 會議開始日期、時間 38 LocalDateTime startTime = LocalDateTime.of(2020, 11, 9, 7, 30); 39 // 會議結束日期、時間 40 LocalDateTime endTime = LocalDateTime.of(2020, 11, 16, 22, 30);
41 42 // 計算日期差 43 Duration duration = Duration.between(startTime, endTime); 44 long days = duration.toDays(); 45 46 if (duration.toMinutes() < 0) { 47 System.err.println("會議結束時間不能早於開始時間"); 48 return 0.0; 49 } 50 51 // 開始 & 結束 時間的時間點(小時) 52 int start = startTime.getHour(); 53 int end = endTime.getHour(); 54 55 int startMinute = startTime.getMinute(); 56 int endMinute = endTime.getMinute(); 57 58 // 時間轉換 59 double realStart = timeTransfer(start, startMinute); 60 double realEnd = timeTransfer(end, endMinute); 61 62 // 總時間合計(加上分鐘) 63 double totalHours = (realEnd - realStart) + days * (endHour - startHour); 64 double totalMoney = totalHours * moneyPerHour; 65 66 // 將時間內的 T 去掉 67 System.out.println("會議開始時間: " + startTime.toString().replace("T", " ")); 68 System.out.println("會議結束時間 " + endTime.toString().replace("T", " ")); 69 System.out.println("會議總耗時:" + totalHours + "h"); 70 System.out.println("會議室價格:" + moneyPerHour + "¥/h"); 71 System.out.println("總計:" + totalMoney + "元"); 72 // 返回價格 73 return totalMoney; 74 } 75 76 /** 77 * 將時間轉換為正常範圍 78 * 小於計費開啟時間記為開啟時間 79 * 大於計費關閉時間記為關閉時間 80 * 81 * @param time 82 * @return 83 */ 84 private static double timeTransfer(int time, int minute) { 85 if (time < startHour) { 86 return startHour; 87 } 88 if (time >= endHour) { 89 return endHour; 90 } else { 91 return time + minute / 60.0; 92 } 93 } 94 }

執行結果: