Menu
Coddy logo textTech

Belirli Bir Zaman Oluşturma

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

time.Now() geçerli anı verse de, çoğu zaman belirli tarihler ve saatlerle çalışmanız gerekir. Go, belirttiğiniz herhangi bir tarih ve saati temsil eden bir time.Time nesnesi oluşturmak için time.Date işlevini sağlar.

time.Date işlevi, şu tam sırayla sekiz parametre alır: yıl, ay, day, saat, dakika, saniye, nanosaniye ve konum. İşte temel söz dizimi:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

Go'nun aylar için time.March gibi sabitler kullandığına dikkat edin; bu, kodunuzu sayılar kullanmaktan daha okunabilir hâle getirir. Tercih ederseniz tamsayıları da (1-12) kullanabilirsiniz. Konum parametresi genellikle UTC zamanı için time.UTC veya sisteminizin yerel saat dilimi için time.Local kullanır.

Bu yaklaşım, ister bir doğum günü, ister son tarih, isterse tarihsel bir tarih olsun, herhangi bir belirli zaman anı oluşturma üzerinde tam kontrol sağlar. Ortaya çıkan time.Time nesnesi, time.Now() ile elde edilen nesneyle tamamen aynı şekilde çalışır ve aynı zaman işlemlerinin tümüyle kullanılabilir.

challenge icon

Görev

Kolay

Belirli tarih ve saatleri temsil etmek için time.Date kullanan bir tarihsel olay zaman çizelgesi uygulaması oluşturun. Bu görev, kesin tarihsel anlar için time.Time nesneleri oluşturma ve bunları düzenli bir biçimde görüntüleme becerinizi sınayacaktır.

İki girdi alacaksınız:

  • "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" biçiminde tarihsel olaylar içeren bir dize (ör. "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • "option1,option2,option3" biçiminde virgüllerle ayrılmış görüntüleme seçeneklerini içeren bir dize (ör. "chronological,details,summary")

Göreviniz:

  1. Tek tek olay girişlerini elde etmek için ilk girdiyi virgüllere göre ayırın
  2. Her olay girişi için olay adını, yılı, ayı, günü, saati ve dakikayı ayıklamak üzere iki nokta üst üste karakterlerine göre ayırın
  3. Sayısal dizeleri tam sayılara dönüştürün ve her olay için time.Date kullanarak bir time.Time nesnesi oluşturun (time.UTC değerini konum parametresi olarak, saniye ve nanosaniye için 0 kullanın)
  4. Uygulama başlığını görüntüleyin: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Olayların yüklenme onayını görüntüleyin: "Loading historical events..."
  6. Her olay için şunu görüntüleyin: "Loaded: [event_name] - [complete_time_object]"
  7. Görüntüleme seçeneklerini elde etmek için ikinci girdiyi virgüllere göre ayırın
  8. Her görüntüleme seçeneğini işleyin:
    • "chronological" için: "=== CHRONOLOGICAL ORDER ===" metnini ve ardından tarihe göre (en erkenden başlayarak) sıralanmış olayları görüntüleyin; "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC" biçimini kullanın
    • "details" için: "=== DETAILED INFORMATION ===" metnini ve ardından her olay için aşağıdakileri görüntüleyin:
      • "Event: [event_name]"
      • " Date: [year]-[month]-[day]"
      • " Time: [hour]:[minute] UTC"
      • " Weekday: [weekday_name]"
      • " Unix timestamp: [unix_seconds]"
    • "summary" için: "=== TIMELINE SUMMARY ===" metnini ve ardından şunları görüntüleyin:
      • "Total events: [number_of_events]"
      • "Earliest event: [earliest_event_name] ([year])"
      • "Latest event: [latest_event_name] ([year])"
      • "Time span: [years_between_earliest_and_latest] years"
    • "years" için: "=== EVENTS BY DECADE ===" metnini ve ardından on yıllara göre gruplanmış olayları "[decade]s: [comma_separated_event_names]" biçiminde görüntüleyin
  9. Tamamlanma mesajını görüntüleyin: "Historical timeline processing completed"

Belirli tarihleri time.Date ile oluşturmak için time paketini, girdi dizelerini ayırmak için strings paketini, dize biçimindeki sayıları tam sayılara dönüştürmek için strconv paketini ve biçimlendirilmiş çıktı için fmt paketini kullanın. time.Date parametreleri tam olarak şu sırayla alır: yıl, ay, gün, saat, dakika, saniye, nanosaniye, konum. Kronolojik sıralama için time.Time nesnelerini Before() yöntemini kullanarak karşılaştırabilirsiniz. Bu görev, belirli zaman anlarının nasıl oluşturulacağını ve Go'nun zaman işlevlerini kullanarak tarihsel verilerle nasıl çalışılacağını gösterir.

Kendin dene

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Boşlukları düzgün işlemek için bufio.Scanner kullanarak girişi oku
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// Girdiden olayları ayrıştır
	eventEntries := strings.Split(eventsInput, ",")
	
	// Girdiden görüntüleme seçeneklerini ayrıştır
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: Kodunuzu aşağıya yazın
	// 1. name, year, month, day, hour, minute çıkarmak için her olay girişini ayrıştır
	// 2. Erişmeden önce parts diliminin yeterli elemana sahip olup olmadığını kontrol etmeyi unutma
	// 3. strconv.Atoi() kullanarak string sayıları tamsayılara dönüştür
	// 4. Her olay için time.Date() kullanarak time.Time nesneleri oluştur
	// 5. Uygulama başlığını ve yükleme mesajlarını görüntüle
	// 6. Process each display option (chronological, details, summary, years)
	// 7. Tamamlanma mesajını görüntüle
	
}
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 ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi