Menu
Coddy logo textTech

Zaman Dilimi Yönetimi

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

Java'daki ZonedDateTime, saat dilimiyle birlikte bir tarih ve saati temsil eder. Farklı saat dilimleriyle çalışırken veya aralarında dönüştürme yaparken kullanışlıdır.

Belirli bir zaman diliminde bir zaman oluşturun:

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

Ayrıca bir LocalDateTimeZonedDateTime'a .atZone() kullanarak dönüştürebilirsiniz:

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

.atZone() mevcut bir yerel tarih-saat'e bir zaman dilimi ekleyerek bir ZonedDateTime üretir.

Zaman dilimleri 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ı ancak New York saat diliminde içerir:

2024-03-15T10:30-04:00[America/New_York]
// Example output

Bir ZonedDateTime'ı biçimlendirmek için DateTimeFormatter kullanın. Desen harfi Z veya xxx, UTC ofsetini (ör. +09:00) biçimlendirir ve VV, bölge kimliğini (ör. Asia/Tokyo) biçimlendirir:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = tokyo.format(formatter);
// Örnek: 2024-03-15 10:30 +09:00
challenge icon

Görev

Kolay

convertTime adında dört argüman alan bir metod oluşturun:

  1. "yyyy-MM-dd HH:mm" formatında bir String (dateTimeStr)
  2. kaynak zaman dilimi ID'si olan bir String (sourceZone)
  3. hedef zaman dilimi ID'si olan bir String (targetZone)
  4. çıkışta zaman dilimi ofsetini dahil edip etmemek için bir boolean (showOffset)

Metod şunları yapmalıdır:

  1. Kaynak zaman dilimindeki giriş tarihsaatını ayrıştırın
  2. Bunu hedef zaman dilimine dönüştürün
  3. Her iki zaman hakkında biçimlendirilmiş bilgi döndürün

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

  • Geçersiz tarihsaat durumunda: "Invalid datetime format" döndürün
  • Geçersiz zaman dilimi durumunda: "Invalid time zone" döndürün
  • showOffset true ise: çıktıda ofseti dahil edin
  • Biçim: "Source: [time1], Target: [time2]"

Kopya kağıdı

ZonedDateTime, farklı zaman dilimleriyle çalışmak için yararlı olan, zaman dilimi içeren bir tarih ve saati temsil eder.

Belirli bir zaman diliminde bir zaman oluşturun:

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

Bir LocalDateTime.atZone() kullanarak ZonedDateTime'a dönüştürün:

LocalDateTime local = LocalDateTime.now();
ZonedDateTime zoned = local.atZone(ZoneId.of("Asia/Tokyo"));

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

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

Z veya xxx kalıplarını kullanarak UTC ofseti içeren bir ZonedDateTime biçimlendirin:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = zoned.format(formatter);
// Örnek: 2024-03-15 10:30 +09:00

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