Menu
CoddyTech

Memformat Waktu

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

Setelah kamu memiliki object time.Time, kamu sering perlu mengonversinya ke format string yang mudah dibaca. Go menggunakan pendekatan unik untuk pemformatan waktu yang berbeda dari bahasa pemrograman lain.

Alih-alih menggunakan kode format seperti %Y-%m-%d, Go menggunakan tanggal referensi sebagai templat. Tanggal referensi ini adalah Mon Jan 2 15:04:05 MST 2006, yang mewakili waktu yang tepat: 2 Januari 2006, pukul 15:04:05 Waktu Standar Pegunungan.

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // output: 2023-10-26

Inti utamanya adalah kamu menyusun komponen tanggal referensi sesuai pola yang kamu inginkan. Untuk format YYYY-MM-DD, kamu menggunakan "2006-01-02" karena seperti itulah tampilan tanggal referensi dalam pola tersebut. Untuk format lain seperti Jan 2, 2006, kamu menggunakan "Jan 2, 2006".

Pendekatan berbasis tata letak ini membuat pemformatan waktu di Go mudah diingat dan fleksibel. Setelah kamu mengingat tanggal acuan, kamu bisa membuat format apa pun dengan cukup menyusun komponennya sesuai pola yang kamu inginkan.

challenge icon

Tantangan

Mudah

Buat sistem tampilan tanggal dan waktu multi-format yang memformat object time.Time menggunakan sistem layout tanggal referensi unik Go. Tantangan ini akan menguji kemampuanmu menggunakan method Format dengan pola layout yang berbeda untuk membuat berbagai representasi tanggal dan waktu.

Kamu akan menerima dua input:

  • String yang berisi informasi tanggal dalam format "year:month:day:hour:minute" (misalnya, "2023:12:25:14:30")
  • String yang berisi permintaan format yang dipisahkan dengan koma dalam format "format1,format2,format3" (misalnya, "iso,american,european,time12,time24")

Tugasmu adalah:

  1. Uraikan input pertama dengan memisahkan berdasarkan titik dua untuk mengambil nilai tahun, bulan, hari, jam, dan menit
  2. Konversikan nilai string ini menjadi bilangan bulat menggunakan package strconv
  3. Buat object time.Time menggunakan time.Date dengan nilai yang sudah diuraikan (gunakan time.UTC untuk lokasi, 0 untuk detik dan nanodetik)
  4. Tampilkan header aplikasi: "=== DATE/TIME FORMATTER ==="
  5. Tampilkan waktu sumber: "Source time: [complete_time_object]"
  6. Uraikan input kedua dengan memisahkan berdasarkan koma untuk mendapatkan permintaan format
  7. Tampilkan header pemformatan: "Formatted outputs:"
  8. Untuk setiap permintaan format, gunakan string layout yang sesuai dengan method Format:
    • Untuk "iso": Gunakan layout "2006-01-02" dan tampilkan "ISO format: [formatted_result]"
    • Untuk "american": Gunakan layout "01/02/2006" dan tampilkan "American format: [formatted_result]"
    • Untuk "european": Gunakan layout "02/01/2006" dan tampilkan "European format: [formatted_result]"
    • Untuk "long": Gunakan layout "January 2, 2006" dan tampilkan "Long format: [formatted_result]"
    • Untuk "time12": Gunakan layout "3:04 PM" dan tampilkan "12-hour time: [formatted_result]"
    • Untuk "time24": Gunakan layout "15:04" dan tampilkan "24-hour time: [formatted_result]"
    • Untuk "full": Gunakan layout "Monday, January 2, 2006 at 3:04 PM" dan tampilkan "Full format: [formatted_result]"
    • Untuk "compact": Gunakan layout "20060102" dan tampilkan "Compact format: [formatted_result]"
  9. Hitung dan tampilkan statistik:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. Tampilkan informasi referensi:
    • "=== REFERENCE DATE INFO ==="
    • "Go uses reference date: Mon Jan 2 15:04:05 MST 2006"
    • "This represents: January 2nd, 2006 at 3:04:05 PM"
    • "Layout patterns arrange these components as needed"
  11. Tampilkan pesan penyelesaian: "Date formatting completed using Go's layout system"

Gunakan package time untuk operasi waktu, package strings untuk memisahkan string input, package strconv untuk mengonversi string menjadi bilangan bulat, dan package fmt untuk output berformat. Ingat bahwa pemformatan waktu Go menggunakan tanggal referensi Mon Jan 2 15:04:05 MST 2006 sebagai templat, lalu kamu menyusun komponen-komponen ini dalam pola yang diinginkan. Tantangan ini menunjukkan cara kerja sistem pemformatan berbasis layout unik Go dengan memintamu menerapkan beberapa pola format berbeda pada object waktu yang sama.

Coba sendiri

package main

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

func main() {
	// Baca input
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// Uraikan komponen tanggal dengan memisahkannya berdasarkan titik dua
	dateComponents := strings.Split(dateInput, ":")
	
	// Ubah komponen string menjadi bilangan bulat
	year, _ := strconv.Atoi(dateComponents[0])
	month, _ := strconv.Atoi(dateComponents[1])
	day, _ := strconv.Atoi(dateComponents[2])
	hour, _ := strconv.Atoi(dateComponents[3])
	minute, _ := strconv.Atoi(dateComponents[4])
	
	// Buat object time.Time
	sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
	
	// Uraikan permintaan format
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Tulis kodemu di bawah ini
	// Tampilkan judul aplikasi
	// Tampilkan waktu sumber
	// Proses setiap permintaan format dan tampilkan output yang telah diformat
	// Hitung dan tampilkan statistik
	// Tampilkan informasi referensi
	// 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