Menu
CoddyTech

Membuat Waktu Tertentu

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 59 dari 68.

Meski time.Now() memberimu waktu saat ini, kamu akan sering perlu bekerja dengan tanggal dan waktu tertentu. Go menyediakan fungsi time.Date untuk membuat object time.Time yang mewakili tanggal dan waktu apa pun yang kamu tentukan.

Fungsi time.Date menerima delapan parameter dalam urutan persis berikut: tahun, bulan, hari, jam, menit, detik, nanodetik, dan lokasi. Berikut sintaks dasarnya:

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

Perhatikan bahwa Go menggunakan konstanta seperti time.March untuk bulan, sehingga kodemu lebih mudah dibaca daripada jika menggunakan angka. Kamu juga bisa menggunakan bilangan bulat (1-12) jika lebih suka. Parameter lokasi biasanya menggunakan time.UTC untuk waktu UTC atau time.Local untuk zona waktu lokal sistemmu.

Pendekatan ini memberimu kendali penuh untuk membuat momen tertentu, baik itu ulang tahun, tenggat waktu, maupun tanggal bersejarah. Object time.Time yang dihasilkan berfungsi persis seperti object dari time.Now() dan dapat digunakan dengan semua operasi waktu yang sama.

challenge icon

Tantangan

Mudah

Buat aplikasi linimasa peristiwa bersejarah yang menggunakan time.Date untuk merepresentasikan tanggal dan waktu tertentu dari masa lalu. Tantangan ini akan menguji kemampuanmu membuat object time.Time untuk momen bersejarah yang tepat dan menampilkannya dalam format yang teratur.

Kamu akan menerima dua input:

  • String yang berisi peristiwa bersejarah dengan format "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" (misalnya, "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • String yang berisi opsi tampilan yang dipisahkan dengan koma dengan format "option1,option2,option3" (misalnya, "chronological,details,summary")

Tugasmu adalah:

  1. Urai input pertama dengan memisahkannya berdasarkan koma untuk mendapatkan entri tiap peristiwa
  2. Untuk setiap entri peristiwa, pisahkan berdasarkan titik dua untuk mengambil nama peristiwa, tahun, bulan, hari, jam, dan menit
  3. Ubah string angka menjadi bilangan bulat dan buat object time.Time menggunakan time.Date untuk setiap peristiwa (gunakan time.UTC untuk parameter lokasi serta 0 untuk detik dan nanodetik)
  4. Tampilkan header aplikasi: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Tampilkan konfirmasi pemuatan peristiwa: "Loading historical events..."
  6. Untuk setiap peristiwa, tampilkan: "Loaded: [event_name] - [complete_time_object]"
  7. Urai input kedua dengan memisahkannya berdasarkan koma untuk mendapatkan opsi tampilan
  8. Proses setiap opsi tampilan:
    • Untuk "chronological": Tampilkan "=== CHRONOLOGICAL ORDER ===", lalu tampilkan peristiwa yang diurutkan berdasarkan tanggal (paling awal terlebih dahulu), dengan format "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"
    • Untuk "details": Tampilkan "=== DETAILED INFORMATION ===", lalu tampilkan baris berikut untuk setiap peristiwa (empat baris terakhir diberi indentasi dua spasi):
      Event: [event_name]
        Date: [year]-[month]-[day]
        Time: [hour]:[minute] UTC
        Weekday: [weekday_name]
        Unix timestamp: [unix_seconds]
    • Untuk "summary": Tampilkan "=== TIMELINE SUMMARY ===", lalu tampilkan:
      • "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"
    • Untuk "years": Tampilkan "=== EVENTS BY DECADE ===", lalu tampilkan peristiwa yang dikelompokkan berdasarkan dekade dengan format "[decade]s: [comma_separated_event_names]"
  9. Tampilkan pesan penyelesaian: "Historical timeline processing completed"

Aturan pemformatan: baris Loaded: mencetak nilai time.Time apa adanya dengan %v, misalnya Loaded: Moon Landing - 1969-07-20 20:17:00 +0000 UTC. Setiap tanggal dan waktu lainnya dibuat secara manual: bulan, hari, dan jam tidak memiliki nol di awal, sedangkan menit selalu terdiri dari dua digit (%02d), sehingga peristiwa yang sama dicetak sebagai Moon Landing: 1969-7-20 at 20:17 UTC, dan menit 0 dicetak sebagai 21:00. [unix_seconds] adalah Unix(), yang bernilai negatif untuk tanggal sebelum 1970. Dalam daftar dekade, urutkan dekade dari yang paling awal hingga paling akhir, dan gabungkan nama-nama dalam setiap dekade dengan koma tanpa spasi, sesuai urutan input.

Gunakan package time untuk membuat tanggal tertentu dengan time.Date, package strings untuk memisahkan string input, package strconv untuk mengubah angka dalam string menjadi bilangan bulat, dan package fmt untuk output berformat. Ingat, time.Date menerima parameter dengan urutan yang tepat: tahun, bulan, hari, jam, menit, detik, nanodetik, lokasi. Untuk mengurutkan secara kronologis, kamu bisa membandingkan object time.Time menggunakan method Before(). Tantangan ini menunjukkan cara membuat momen waktu tertentu dan bekerja dengan data bersejarah menggunakan fitur waktu di Go.

Coba sendiri

package main

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

func main() {
	// Baca input menggunakan bufio.Scanner agar spasi ditangani dengan benar
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// Uraikan data peristiwa dari input
	eventEntries := strings.Split(eventsInput, ",")
	
	// Uraikan opsi tampilan dari input
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: Tulis kodemu di bawah ini
	// 1. Uraikan setiap entri peristiwa untuk mengambil nama, tahun, bulan, hari, jam, dan menit
	// 2. Pastikan slice parts memiliki cukup elemen sebelum kamu mengaksesnya
	// 3. Ubah angka dalam string menjadi bilangan bulat menggunakan strconv.Atoi()
	// 4. Buat object time.Time menggunakan time.Date() untuk setiap peristiwa
	// 5. Tampilkan judul aplikasi dan pesan pemuatan
	// 6. Proses setiap opsi tampilan (kronologis, detail, ringkasan, tahun)
	// 7. Tampilkan pesan penyelesaian
	
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online