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.
Görev
KolayBelirli 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:
- Tek tek olay girişlerini elde etmek için ilk girdiyi virgüllere göre ayırın
- 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
- Sayısal dizeleri tam sayılara dönüştürün ve her olay için
time.Datekullanarak birtime.Timenesnesi oluşturun (time.UTCdeğerini konum parametresi olarak, saniye ve nanosaniye için 0 kullanın) - Uygulama başlığını görüntüleyin:
"=== HISTORICAL TIMELINE APPLICATION ===" - Olayların yüklenme onayını görüntüleyin:
"Loading historical events..." - Her olay için şunu görüntüleyin:
"Loaded: [event_name] - [complete_time_object]" - Görüntüleme seçeneklerini elde etmek için ikinci girdiyi virgüllere göre ayırın
- 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- 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
}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
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme7Derinlemesine Hata Yönetimi
Özel Hata Türleri`%w` ile Hataları Sarmalama`errors.Is` ile Sarmalı Açma`errors.As` ile Sarmalı Açma`panic` Kavramını Anlamak`recover` KullanımıÖzet - Güvenli Bölme10Zamanla Çalışmak
Şu Anki Zamanı AlmaBelirli Bir Zaman OluşturmaZamanı FormatlamaZaman Dizelerini AyrıştırmaZaman SüresiZaman AritmetiğiUyutma ve Ticker'larÖzet - Basit Zamanlayıcı2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve DavranışlarKendi başına pratik yap: Online Go derleyicisi