Saya mencari pemahaman yang lebih baik tentang kisah pengguna berikut:
John bekerja di Sidney. Pada pukul 9:00 pagi, dia mencatat peristiwa di aplikasi web yang berjalan di server di Zurich. Keesokan harinya, dia melakukan perjalanan ke New York untuk pertemuan darurat di mana acara tersebut harus dibahas. Selama pertemuan, dia mencari acara tersebut berdasarkan tanggal dan waktu.
Menurut saya, setidaknya ada dua masalah di sini:
- Bagaimana cara menyimpan stempel waktu di database
- Bagaimana cara menampilkannya di UI
Ketika John mencari acara tersebut, dia akan tahu bahwa itu terjadi pada jam 9:00 tetapi apa yang harus dia masukkan di browser web? Dia tidak akan menemukan apa pun ketika dia hanya memasukkan "9:00" sebagai cap waktu karena itu mungkin waktu Zurich atau New York (karena acara tersebut belum ditemukan, aplikasi tidak memiliki cara untuk mengetahui bahwa itu terjadi di Sidney, jadi tidak dapat secara otomatis memilih zona waktu yang benar).
Apa cara yang baik untuk meminta stempel waktu kepada pengguna yang mungkin menyertakan zona waktu?
Masalah kedua adalah bagaimana menampilkan hasilnya. Jika tim dari seluruh dunia perlu mendiskusikan acara tersebut (dan menemukan acara terkait, pikirkan serangan cracker yang menargetkan beberapa situs di seluruh dunia sekaligus).
Apa contoh yang baik untuk menampilkan stempel waktu yang mungkin telah dibuat di zona waktu yang berbeda?
Catatan: Harap berkonsentrasi pada kegunaan persyaratan. Saya bisa mengetahui sendiri pemetaan database. Saat ini, saya tidak yakin dengan alur kerjanya. Ini harus menanyakan / menyajikan informasi yang diperlukan dengan cara yang tidak mengganggu / intuitif. Jika Anda bisa, berikan tautan ke aplikasi web yang ada yang sudah menyelesaikan masalah ini.
sumber
Jawaban:
Masalah menyimpan cap waktu sederhana: Simpan di UTC.
Untuk menampilkannya, sebaiknya gunakan pengaturan zona waktu perangkat dan gunakan sebagai zona waktu saat ini. Karena itu, harus ada tarik-turun zona waktu di sebelah kotak "masukan waktu", yang secara default ke zona waktu perangkat saat ini, sehingga pengguna dapat mengubahnya jika diperlukan.
Mayoritas pengguna Anda mungkin tidak akan banyak mengubah zona waktu, atau sama sekali. Sebagian besar, situasi yang Anda uraikan tidak umum. Dengan menerapkan tarik-turun dengan default yang sesuai, Anda seharusnya dapat mempermudah mereka yang bergerak (karena mereka biasanya memiliki pemahaman yang lebih baik tentang zona waktu daripada yang bukan wisatawan).
Bahkan, yang lebih baik adalah menyimpan zona waktu yang disetel perangkat saat aplikasi Anda pertama kali dijalankan, lalu melihat apakah itu pernah berubah. Jika memang berubah, maka pengguna mungkin seorang musafir dan mungkin akan mendapat manfaat dari tarik-turun zona waktu. Jika tidak, jangan tampilkan dropdown dan default ke zona waktu perangkat (karena pengguna tidak perlu mengetahuinya). Dalam kedua kasus tersebut, miliki setelan di aplikasi yang memungkinkan pengguna untuk secara manual menampilkan / menyembunyikan tarik-turun zona waktu.
Untuk meringkas di atas:
sumber
Dalam aplikasi kami, kami biasanya menyimpan zona waktu pengguna ketika kami pertama kali mendaftar, seperti yang sering dilihat di situs forum, dan selalu menampilkan waktu dengan zona waktu .
Untuk menyimpan tanggal, UTC adalah cara yang tepat. Konversikan ke UTC dan tempelkan ke database. Saat mengambil, cukup ubah waktu ke zona waktu yang disetel untuk pengguna.
Saya harus menyelesaikan kasus penggunaan serupa, di mana pemberitahuan yang disesuaikan, seperti "Selamat Tahun Baru", dapat dikirim ke semua pengguna aplikasi web. Karena pengguna tersebar di seluruh dunia, kami perlu menampilkan notifikasi sesuai dengan zona waktu. Menyimpan stempel waktu di UTC dengan baik membantu tujuan kami, tanpa cegukan.
Dalam kasus penggunaan Anda, jika Anda tidak menyimpan zona waktu pengguna di suatu tempat, Anda tidak akan pernah dapat mengembalikan hasil pencarian Anda secara akurat tanpa meminta masukan pengguna, kecuali Anda mulai menggunakan semacam deteksi lokasi seperti yang dilakukan gmaps, tetapi itu tidak benar. t dapat diandalkan. Jadi, Anda harus menanyakan zona waktu setiap saat untuk memastikan pengguna mengetahui apa yang dia masukkan di situs web.
Jika Anda memiliki informasi zona waktu, seluruh aplikasi web harus dijalankan dengan pengaturan zona waktu. Karenanya, saat pengguna menelusuri pukul 9.00, dia akan menelusuri dengan zona waktu Sydney. Di sisi lain, jika dia membuat acara sambil duduk di New York, dia akan membuat acara dengan zona waktu Sydney. Kami menyelesaikan kasus seperti itu dengan selalu menampilkan zona waktu sambil menampilkan tanggal.
Semoga membantu! :)
sumber
UTC. Tetap sederhana.
Gunakan zona waktu yang paling relevan bagi pengguna.
Jika Anda tahu pengguna akan masuk atau bepergian ke Sydney untuk acara tersebut, maka mereka akan berpikir di zona waktu tersebut saat mengatur transportasi ke acara tersebut. Fakta bahwa mereka saat ini di New York sebagian besar tidak relevan. Dan tentu saja, jika aplikasi Anda menampilkan tanggal dalam berbagai zona waktu, itu harus selalu menampilkan zona waktu di sebelah tanggal, misalnya 09:00 EST .
Jika itu tidak terlalu mengacaukan antarmuka Anda, Anda dapat menampilkan tanggal dalam zona waktu acara dan zona waktu lokal, misalnya 2012-06-13 09:00 EST (2012-06-12 19:00 EDT) .
Saya berpendapat bahwa pencarian adalah masalah yang serupa, dengan satu peringatan: kami dapat mentolerir positif palsu (mendapatkan hasil yang tidak kami harapkan), tetapi kami tidak tahan dengan negatif palsu (tidak mendapatkan hasil yang kami harapkan).
Sekali lagi, saya akan fokus pada pencarian zona waktu yang paling relevan dengan pengguna (misalnya zona waktu acara), dan memberikan hasil ini prioritas dalam hasil pencarian, tetapi Anda juga dapat mengembalikan peristiwa yang cocok di zona waktu lain yang relevan dengan pengguna (mis. waktu lokal). Jika Anda melakukan ini, Anda harus menunjukkan tanggal acara di zona waktu yang cocok, terutama jika Anda menyorot teks yang cocok.
sumber
Di sini saya memberikan saran untuk kegunaan terbaik tanpa banyak repot tentang kelayakan implementasi.
1. Untuk edisi pertama menyimpan acara di db, semua orang setuju untuk menyimpannya di UTC
2. Untuk memberikan pengalaman pengguna terbaik, simpan riwayat zona waktu pengguna. Jika Anda dapat menyimpan stempel waktu perubahan zona waktu, lebih baik lagi. Ini akan memungkinkan kami memberikan kebebasan kepada pengguna untuk melakukan kueri tanpa menentukan zona waktu secara eksplisit setiap saat.
3. Apa cara yang baik untuk menanyakan stempel waktu kepada pengguna yang mungkin menyertakan zona waktu?
4. Bagaimana cara menampilkan hasil, jika tim dari seluruh dunia perlu mendiskusikan acara tersebut:
Saran ini diberikan dengan maksud agar pengguna tidak perlu melakukan perhitungan dalam waktu lokalnya tetapi pada saat yang sama ia harus dapat berkomunikasi dengan pengguna lain dengan lancar di zona waktu pilihan mereka.
sumber
Ok saya mendapat pendekatan yang berbeda dari yang lain:
Pertama, saya mengasumsikan beberapa hal sebelumnya.
Orang yang mendaftarkan acara memiliki ponsel cerdas (jika itu adalah browser, saya tidak perlu membuat asumsi ini) dengan:
GPS
Kemampuan HTML5.
Kemampuan Javascript
Solusi: Jelas UTC , saya melapisi prosedur di bawah ini:
Langkah 1. Gunakan Geolocation pengguna menggunakan Geolocation API
Langkah 2. Berikan (Bujur, Lintang) sebagai argumen untuk beberapa api (Lintang, Bujur) ke TimeZone seperti Yahoo API (gunakan Bendera R untuk mengubah Latitude menjadi Zona Waktu) untuk mendapatkan zona waktu pengguna.
=> Zona waktu pengguna ditentukan tanpa input pengguna (Saya menggunakan ini karena Anda tidak bisa begitu saja berasumsi bahwa pengguna mengetahui zona waktu tempat dia tinggal, saya tahu zona waktu saya hanya setelah beberapa bulan atau sesuatu di tempat itu: P, sangat bodoh! )
Setiap tabel Peristiwa memiliki
Timezone
,Event
& juga dapat memilikiCityName
Kemudian membuat tabel database lain dengan klasifikasi berdasarkanCityName
s. Jadi di sini pengguna akan memiliki dua kolom=> gunakan API Google Kalender atau beberapa API Kalender
Bacaan Terkait:
Tentukan zona waktu dari lintang / bujur tanpa menggunakan layanan web seperti Geonames.org
Pencarian zona waktu dari bujur lintang
Saya tahu ini hanya tentang menunjukkan beberapa ide bagaimana menyelesaikan masalah ini. Namun lihat seberapa akurat & ringannya pengguna saat Zona Waktu ditentukan dengan menggunakan API perangkat
Semoga membantu!
sumber
new Date().getTimezoneOffset()
memberikannya dalam beberapa menit di belakang UTC.Untuk kasus khusus itu saya akan menyimpan keduanya waktu setempat dan UTC. UTC agak utama dan digunakan untuk sinkronisasi dan konversi waktu ke zona waktu saat ini. Lokal digunakan untuk pencarian dan info tambahan, seperti:
Anda ada rapat:
atau semacam itu. Cara lainnya adalah dengan menyimpan zona waktu pembuatan, dan mengonversi pada waktu proses (ini lebih baik jika pengguna akan mengubah waktu rapat). Apa pun alasannya, alasan utamanya adalah untuk dapat memulihkan waktu pembuatan asli sehingga pengguna dapat merujuknya.
sumber
Pada pembuatan acara, saya akan menyimpan waktu UTC dan zona waktu lokal (alias
creation time zone
). Saya akan menggunakan apa yang saya simpan untuk mengubah waktu UTC menjadi waktu lokal (aliascreation time
) dan menyimpannya bersama waktu UTC dancreation time zone
.CATATAN: Saya dapat menyimpan waktu lokal sejak awal, tetapi ketika pengguna melakukan pencarian untuk suatu acara, saya berharap ada konversi ke waktu lokal. Saya juga berharap server dapat mendeteksi di zona waktu mana klien berada.
Saat pengguna menelusuri "9:00", saya akan mencari acara yang menyertakan "9:00" baik dalam UTC ATAU
creation time
ATAU waktu lokal. Untuk hasilnya, saya akan menampilkan satu tabel hasil dicreation time
(Ini dimaksudkan untuk menampilkan stempel waktu yang mungkin telah dibuat di zona waktu yang berbeda, karena kami berasumsi pengguna mencari untuk jam berapa dia membuat acara di mana pun dia berada.) , dan tampilkan tabel hasil kedua di bawah dengan hasil terkait, mungkin dengan tajuk, "Bukan yang Anda cari? Lihat hasil terkait" (ini termasuk UTC dan hasil waktu lokal yang tersisa).Secara keseluruhan, saya akan menampilkan waktu UTC, waktu lokal, itu
creation time
, dancreation time zone
(yaitu waktu lokal dan zona waktu acara tempat acara itu dibuat) diurutkan berdasarkan waktu UTC, sehingga Anda dapat melihat acara mana yang lebih dulu, jika dua berbeda acara dijadwalkan pukul 9:00 di dua zona waktu berbeda.sumber
BETWEEN
kondisi 24x ).