Menu
CoddyTech

Zaman Dilimi Yönetimi

Coddy'nin Java Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 59 / 59.

Java'da ZonedDateTime, saat dilimiyle birlikte bir tarih ve saati temsil eder. Farklı saat dilimleriyle çalışırken veya bunlar arasında dönüşüm yaparken kullanışlıdır.

Belirli bir zaman diliminde bir zaman oluşturun:

ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));

Ayrıca LocalDateTime kullanarak .atZone() ile bir ZonedDateTime oluşturabilirsiniz:

LocalDateTime localDT = LocalDateTime.of(2024, 3, 15, 10, 30);
ZonedDateTime tokyo = localDT.atZone(ZoneId.of("Asia/Tokyo"));

Zonalar arasında zamanı dönüştür:

ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));

Yukarıdaki kodu çalıştırdıktan sonra newYork, tokyo ile aynı anı New York'un saat diliminde içerir:

2024-03-15T10:30-04:00[America/New_York]
// Örnek çıktı

Bir ZonedDateTime biçimlendirmek için DateTimeFormatter kullanın. xxx deseniyle ofseti ekleyin: +09:00 veya -04:00 yazdırır ve sıfır ofseti +00:00 olarak gösterir (bunun yerine büyük harfli XXX, sıfır ofset için Z yazdırır):

// Ofset olmadan
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
// Ofset ile (örn. +09:00 veya -04:00)
DateTimeFormatter fmtWithOffset = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String result = newYork.format(fmtWithOffset);
// Örnek: 2024-03-15 10:30 -04:00
challenge icon

Görev

Kolay

convertTime adlı ve dört bağımsız değişken alan bir yöntem oluşturun:

  1. "yyyy-MM-dd HH:mm" biçiminde bir String (dateTimeStr)
  2. Kaynak saat dilimi kimliği olan bir String (sourceZone)
  3. Hedef saat dilimi kimliği olan bir String (targetZone)
  4. Çıktıya saat dilimi farkının eklenip eklenmeyeceğini belirten bir boolean (showOffset)

Yöntem şunları yapmalıdır:

  1. Girdi tarih-saatini kaynak saat diliminde ayrıştırmak
  2. Bunu hedef saat dilimine dönüştürmek
  3. Her iki zaman hakkında biçimlendirilmiş bilgileri döndürmek

Döndürülecek mesajlar şunlar olmalıdır:

  • Geçersiz tarih-saat durumunda: "Invalid datetime format" döndürün
  • Geçersiz saat dilimi durumunda: "Invalid time zone" döndürün
  • showOffset true ise: çıktıya saat dilimi farkını ekleyin; xxx kalıbıyla biçimlendirilmelidir, böylece sıfır fark +00:00 olarak yazdırılır
  • Biçim: "Source: [time1], Target: [time2]"

Kendin dene

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) {
        // Kodunuzu buraya yazın
    }
    
    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));
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi