Tính toán thời gian trong Python
Chào các bạn!
Mình có một bài tập như sau mong các bạn giúp đỡ.
Ví dụ: Giả sử mình nhập 2 công việc cần làm (CV1 và CV2) bị trùng nhau về thời gian thực hiện như sau.
CV1: từ 08:00 15/12/2016 đến 15:00 15/12/2016
CV2: từ 10:00 15/12/2016 đến 17:30 15/12/2016 (tổng thời gian làm: 7.5h)
Đề bài yêu cầu: sau khi nhập thời gian hai CV trên, do bị trùng về thời gian thực hiện nên hệ thống sẽ phải sắp xếp thời gian cần để hoàn thành hai CV trên (chỉ tính trong giờ hành chính từ 8h đến 12h và từ 13h30 đến 18h) theo quy luật CV nào bắt đầu trc thì làm trc rồi mới bắt đầu CV2 ngay sau khi hoàn thành CV1.
Vậy output mong muốn sẽ là:
CV1: từ 08:00 15/12/2016 đến 15:00 15/12/2016
CV2: từ 15:00 15/12/2016 đến 14:00 16/12/2016 (tổng thời gian làm vẫn là 7,5h)
Mình đã giải quyết được phần quy luật sắp xếp thứ tự các CV. Tuy nhiên gặp vấn đề khi tính toán thời gian do chưa tìm được cách để hệ thống chỉ tính toán thời gian trong giờ hành chính, chứ không bị tràn ra ngoài 18h hoặc trước 8h chẳng hạn.
MÌnh trình bày có phần hơi lủng củng do cũng kb phải viết ntn. Các bạn thông cảm
Cảm ơn m.n!
Bạn up code đã viết lên được không? Sửa code nhanh hơn code từ đầu
Mai bạn nhé. Code mình để ở văn phòng rồi. K mang về nhà được
Tại sao cv2 lại có tổng thời gian là 7.5h nhưng cv1 lại ko tính thời gian làm v bạn nhỉ :?
Mình chưa hiểu chỗ đó lắm.
Vì giả sử như cv2, cv1 làm từ 8h-15h -> 7h làm việc.
Vậy cv phải từ 8h -> 16h30 mới đủ 7h làm việc :?
Vì CV1 bắt đầu trc nên mình không cần quan tâm nó phải hoàn thành trong bao nhiêu thời gian bạn ạ. Mình chỉ cần quan tâm CV2 phải đc xếp ngay sau khi kết thúc CV1, đủ thời gian cần để hoàn thành và thời gian đó phải năm trong giờ hành chính.
Vậy thì ta có thế này, mình nói theo ý mình hiểu đề
Vd:
B1: timeLeft = 18h-15h = 3
B2: time2 = 7.5, timeLeft = 3 -> time2 > timeLeft; tới B3
B3: dayToFinish = 1; time2 = time2 - timeLeft = 4.5
B4: 4.5 / 8.5 = 0.xxxx. Lấy phần nguyên -> 0. Vậy dayToFinish ko đổi.
B5: timeToFinish = 4.5 mod 8.5 = 4.5
B6: finishTime = 8 + 4.5 + 1.5 = 14h
-> Tgian bắt đầu cv2 là thời điểm kết thúc cv1
Tgian kết thúc cv2 thì như trên
= 14h, (15/12 + dayToFinish) = 14h ngày 16/12
Ở B1 và B2. Giả sử thời gian ntn:
CV1 : từ 08:00 15/12/2016 đến 15:00 16/12/2016
CV2: từ 10:00 15/12/2016 đến 17:30 16/12/2016
Vậy làm thế nào để có thể tính chính xác được timeLeft và time2 hả bạn?
time2 mình tính liên tục rồi mới từ đó chia ra theo ca.
Như vd của bạn thì time2 = 24-10 + 17.5 = 14 + 17.5 = 31.5
Còn timeLeft thì chỉ tính tgian trong ngày cv1 hoàn thành thôi.
Như trên là còn lại 3h trong ngày 16/12. Tất nhiên sẽ có 1 số th như tgian hoàn thành ko nằm trong khung giờ hành chính. Cái này bạn tự xử nhé :~