טיפול באזורי זמן
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Java של Coddy. שיעור 59 מתוך 59.
ZonedDateTime ב-Java מייצג תאריך ושעה עם אזור זמן. הוא שימושי כשעובדים עם אזורי זמן שונים או ממירים ביניהם.
יוצרים שעה באזור זמן מסוים:
ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));אפשר גם ליצור ZonedDateTime מתוך LocalDateTime באמצעות .atZone():
LocalDateTime localDT = LocalDateTime.of(2024, 3, 15, 10, 30);
ZonedDateTime tokyo = localDT.atZone(ZoneId.of("Asia/Tokyo"));המרת זמן בין אזורי זמן:
ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));לאחר הרצת הקוד שלמעלה, newYork מכיל את אותו רגע כמו tokyo, אך באזור הזמן של ניו יורק:
2024-03-15T10:30-04:00[America/New_York]
// פלט לדוגמהכדי לעצב ZonedDateTime, השתמשו ב-DateTimeFormatter. הוסיפו את היסט אזור הזמן באמצעות התבנית xxx: היא מדפיסה +09:00 או -04:00, והיסט של אפס בתור +00:00 (האותיות הגדולות XXX מדפיסות Z עבור היסט של אפס):
// ללא היסט
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
// עם היסט (למשל +09:00 או -04:00)
DateTimeFormatter fmtWithOffset = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String result = newYork.format(fmtWithOffset);
// דוגמה: 2024-03-15 10:30 -04:00אתגר
קלצרו מתודה בשם convertTime שמקבלת ארבעה ארגומנטים:
- מחרוזת (
dateTimeStr) בפורמט "yyyy-MM-dd HH:mm" - מחרוזת (
sourceZone) שהיא מזהה אזור הזמן המקורי - מחרוזת (
targetZone) שהיא מזהה אזור הזמן היעד - ערך בוליאני (
showOffset) שקובע אם לכלול את היסט אזור הזמן בפלט
המתודה צריכה:
- לנתח את תאריך ושעת הקלט באזור הזמן המקורי
- להמיר אותם לאזור הזמן היעד
- להחזיר מידע מעוצב על שתי השעות
ההודעות שיוחזרו צריכות להיות:
- אם תאריך ושעה לא תקינים: להחזיר "Invalid datetime format"
- אם אזור הזמן לא תקין: להחזיר "Invalid time zone"
- אם showOffset הוא true: לכלול את ההיסט בפלט, בפורמט של תבנית
xxx, כך שהיסט של אפס יודפס כ-+00:00 - פורמט: "Source: [time1], Target: [time2]"
נסו בעצמכם
import java.util.Scanner;
import java.time.*;
import java.time.format.*;
public class Main {
public static String convertTime(String dateTimeStr, String sourceZone,
String targetZone, boolean showOffset) {
// כתבו את הקוד שלכם כאן
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String dateTimeStr = scanner.nextLine();
String sourceZone = scanner.nextLine();
String targetZone = scanner.nextLine();
boolean showOffset = Boolean.parseBoolean(scanner.nextLine());
System.out.println(convertTime(dateTimeStr, sourceZone, targetZone, showOffset));
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםגישה לאיברים במערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםסיכום — מערכים דו־ממדייםחיבור וחיסור מטריצותמערכים מדורגיםמערכים תלת־ממדיים ומעבר להםתבניות נפוצות במערכים דו־ממדייםסיכום — כל מה שצריך לדעת על מערכים4HashSet חלק 1
מהו HashSet?הוספת איברהסרת איברבדיקה אם איבר קייםבדיקת ריקנות וגודלניקוי ושכפולסיכום - HashSet10תאריך ושעה
יסודות LocalDateפעולות LocalTimeשימוש ב־LocalDateTimeתקופה ומשכי זמןעיצוב תאריכיםטיפול באזורי זמןתרגלו בעצמכם: קומפיילר Java אונליין