Menu
CoddyTech

תקופה ומשכי זמן

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Java של Coddy. שיעור 57 מתוך 59.

‏Period מייצג פרק זמן המבוסס על תאריך (שנים, חודשים, ימים), בעוד ש־Duration מייצג פרק זמן המבוסס על זמן (שעות, דקות, שניות).

יצירת תקופה:

Period period = Period.of(1, 2, 15);
// 1 שנה, 2 חודשים, 15 ימים

יצירת משך זמן:

Duration duration = Duration.ofHours(2);
// 2 שעות
Duration minutes = Duration.ofMinutes(90);
// 90 דקות

לאחר ביצוע הקוד שלמעלה, period מכיל:

P1Y2M15D  // פורמט ISO-8601

מדוד את הפער בין שני תאריכים באמצעות Period.between(). היא מקבלת שני ערכים מסוג LocalDate ומחלקת את הפער לשנים, חודשים וימים:

LocalDate start = LocalDate.of(2024, 1, 15);
LocalDate end = LocalDate.of(2025, 3, 20);
Period p = Period.between(start, end);
p.getYears();   // 1
p.getMonths();  // 2
p.getDays();    // 5

getDays() מחזירה רק את הימים שנותרו לאחר חישוב השנים והחודשים השלמים, ולא את מספר הימים הכולל בין שני התאריכים. LocalDateTime מספקת את התאריך שלה באמצעות toLocalDate().

מדדו את הפער בין שני זמנים בעזרת Duration.between(), שמקבלת שני ערכי LocalDateTime (או LocalTime):

LocalDateTime from = LocalDateTime.of(2024, 3, 15, 10, 30);
LocalDateTime to = LocalDateTime.of(2024, 3, 15, 14, 45);
Duration d = Duration.between(from, to);
d.toHours();        // 4
d.toMinutes();      // 255
d.toMinutesPart();  // 15

toMinutes() סופרת את כל הפער בדקות, כולל השעות. toMinutesPart() מחזירה את הדקות שנותרו לאחר השעות השלמות, כך שהפער הזה הוא 4 שעות ו-15 דקות.

challenge icon

אתגר

קל

צרו מתודה בשם calculateDifference שמקבלת ארבעה ארגומנטים:

  1. מחרוזת (start) בפורמט "yyyy-MM-dd HH:mm"
  2. מחרוזת (end) בפורמט "yyyy-MM-dd HH:mm"
  3. מחרוזת (unit) שערכה הוא "period" או "duration"
  4. מחרוזת (format) שערכה הוא "full" או "simple"

המתודה צריכה:

  1. לחשב את ההפרש בין תאריכי ההתחלה והסיום
  2. להחזיר את ההפרש בפורמט שצוין

ההודעות שיוחזרו צריכות להיות:

  • אם התאריכים אינם תקינים: להחזיר "Invalid date format"
  • אם היחידה אינה תקינה: להחזיר "Invalid unit"
  • אם הפורמט אינו תקין: להחזיר "Invalid format"
  • עבור תקופה בפורמט "full": "Years: X, Months: Y, Days: Z"
  • עבור תקופה בפורמט "simple": "XyYmZd"
  • עבור משך בפורמט "full": "Hours: X, Minutes: Y", כאשר Y הוא מספר הדקות שנותרו לאחר השעות השלמות
  • עבור משך בפורמט "simple": "XhYm"

נסו בעצמכם

import java.util.Scanner;
import java.time.*;
import java.time.format.*;

public class Main {
    public static String calculateDifference(String start, String end, String unit, String format) {
        // כתבו את הקוד שלכם כאן
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String start = scanner.nextLine();
        String end = scanner.nextLine();
        String unit = scanner.nextLine();
        String format = scanner.nextLine();
        
        System.out.println(calculateDifference(start, end, unit, format));
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Java אונליין