תקופה ומשכי זמן
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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(); // 5getDays() מחזירה רק את הימים שנותרו לאחר חישוב השנים והחודשים השלמים, ולא את מספר הימים הכולל בין שני התאריכים. 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(); // 15toMinutes() סופרת את כל הפער בדקות, כולל השעות. toMinutesPart() מחזירה את הדקות שנותרו לאחר השעות השלמות, כך שהפער הזה הוא 4 שעות ו-15 דקות.
אתגר
קלצרו מתודה בשם calculateDifference שמקבלת ארבעה ארגומנטים:
- מחרוזת (
start) בפורמט "yyyy-MM-dd HH:mm" - מחרוזת (
end) בפורמט "yyyy-MM-dd HH:mm" - מחרוזת (
unit) שערכה הוא "period" או "duration" - מחרוזת (
format) שערכה הוא "full" או "simple"
המתודה צריכה:
- לחשב את ההפרש בין תאריכי ההתחלה והסיום
- להחזיר את ההפרש בפורמט שצוין
ההודעות שיוחזרו צריכות להיות:
- אם התאריכים אינם תקינים: להחזיר "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));
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםגישה לאיברים במערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםסיכום — מערכים דו־ממדייםחיבור וחיסור מטריצותמערכים מדורגיםמערכים תלת־ממדיים ומעבר להםתבניות נפוצות במערכים דו־ממדייםסיכום — כל מה שצריך לדעת על מערכים4HashSet חלק 1
מהו HashSet?הוספת איברהסרת איברבדיקה אם איבר קייםבדיקת ריקנות וגודלניקוי ושכפולסיכום - HashSet10תאריך ושעה
יסודות LocalDateפעולות LocalTimeשימוש ב־LocalDateTimeתקופה ומשכי זמןעיצוב תאריכיםטיפול באזורי זמןתרגלו בעצמכם: קומפיילר Java אונליין