Misalnya, Anda perlu memasukkan tanggal atau waktu

Cara mengatur waktu dan tanggal pada whatsapp.




SETTING FORMULIR TANPA HARUS LOGIN GOOGLE DAN CARA TUTUP PENDAFTARAN

Load more...

.

Misalnya, Anda perlu memasukkan tanggal atau waktu Gunakan tanggal dan waktu untuk bekerja dengan benar / Hampir semua proyek menghadapi masalah karena penanganan dan penyimpanan tanggal dan waktu yang salah. Meskipun item digunakan di zona waktu Papillion sanky yang sama, Anda tetap akan merasa tidak senang setelah beralih ke musim dingin / musim panas. Pada saat yang sama, sedikit orang yang bingung tentang penerapan mekanisme yang benar dari awal, karena terkesan tidak ada masalah, karena semuanya sepele. Sayangnya, fakta-fakta belakangan menunjukkan bahwa bukan itu masalahnya.

penanganan
Mari kita pertimbangkan setiap item secara terpisah dan jangan lupa saran umumnya. Misalnya, laboratorium yang mengumpulkan bahan yang akan dianalisis terletak di zona waktu +2, dan cabang pusat yang memantau pelaksanaan analisis tepat waktu terletak di zona waktu +1. Waktu yang ditunjukkan dalam contoh dicatat saat laboratorium pertama mengumpulkan bahan. Muncul pertanyaan - nomor jam berapa yang harus dilihat oleh kantor pusat? Tentunya, software di kantor pusat seharusnya menampilkan 16 Januari 226: 16-satu jam lebih sedikit, karena menurut jam mereka, peristiwa itu terjadi pada saat itu. Nilai akan diubah menjadi representasi string untuk transmisi ke server- "16:16:37 + 3: 1".
Waktu dan bawa ke zona waktu saat ini. Misalnya, jika server menjalankan +1, objek akan berisi 2 Maret 227 :37. Server menyimpan data ke database, tetapi tidak berisi informasi apa pun tentang zona waktu-jenis tanggal / waktu yang paling umum digunakan tidak tahu apa-apa. Oleh karena itu, database akan disimpan dalam zona waktu pada :37 pada tanggal 2 Maret 227.

Server membaca data dari database dan membuat objek terkait yang nilainya :37 pada tanggal 2 Maret 227. Dan karena server berjalan di zona waktu +1, nilainya juga akan ditafsirkan dalam zona waktu yang sama. Nilai akan diubah menjadi representasi string untuk transmisi ke klien- "16:16:37 + 2: 1".

Semuanya tampaknya sangat diperlukan, tetapi mari kita pertimbangkan apa yang mungkin salah dalam prosesnya. Faktanya, masalah di sini bisa terjadi hampir di setiap langkah.
Waktu di klien dapat dibuat tanpa zona waktu sama sekali-misalnya, ketik. Waktu dapat dihasilkan tanpa zona waktu sama sekali-misalnya, tipe dalam. Juga, dalam prakteknya, jika Anda tidak secara eksplisit menentukan lain segera setelah proofreading, itu persis. Dalam hal itu akan terjadi. Jika server aplikasi yang menggunakan database bersama berada di zona waktu yang berbeda, offset waktu dapat menyebabkan kebingungan yang serius. Nilai tanggal / waktu yang ditulis oleh server ke database dan dibaca oleh server akan sangat berbeda dari nilai asli yang sama yang ditulis oleh server dan dibaca oleh server.
Memindahkan server aplikasi dari satu area ke area lain akan menyebabkan kesalahpahaman tentang nilai tanggal / waktu yang sudah disimpan.
Namun, kesalahan paling serius dalam rangkaian di atas adalah penggunaan zona waktu lokal di server. Jika tidak ada konversi waktu musim panas / musim dingin, tidak akan ada masalah lain. Jika tidak, Anda akan mendapatkan banyak kejutan yang tidak menyenangkan. Terkadang negara yang berbeda dapat mengubah aturan mereka, dan perubahan ini harus dimasukkan ke dalam pembaruan sistem terlebih dahulu. Dalam praktiknya, kami berulang kali menemukan operasi yang salah dari mekanisme ini, dan hasilnya diselesaikan dengan menginstal sistem operasi atau menggunakan patch pustaka pihak ketiga. Kemungkinan masalah yang sama terjadi lagi bukanlah nol, jadi yang terbaik adalah menghindarinya dengan cara yang terjamin.
Mempertimbangkan pertimbangan di atas, kami akan merumuskan metode transmisi dan penyimpanan waktu yang paling andal dan sederhana: di server dan database, semua nilai harus dikonversi ke zona waktu. Saat mengirim data ke server, klien harus meneruskan offset zona waktu sehingga server dapat mengonversi waktu dengan benar. Opsi lainnya adalah memaksa klien untuk melakukan konversi ini, tetapi opsi pertama lebih fleksibel. Saat menerima data kembali dari server, klien akan tahu bahwa tanggal dan waktu akan diubah ke zona waktu lokal, karena dia akan tiba pada waktu itu juga. diubah
Tidak ada transisi antara waktu musim panas dan waktu musim dingin, dan masalah yang terkait dengannya tidak akan relevan. Di server, saat membaca data dari database, Anda tidak perlu mengonversi nilai waktu, Anda hanya perlu secara eksplisit menunjukkan bahwa nilainya sesuai. Misalnya, dalam., Itu dapat dicapai dengan menyetel pada objek waktu. Perbedaan zona waktu antara server yang menggunakan database publik, dan transmisi server dari satu area ke area lain, tidak akan pernah memengaruhi kebenaran data yang diterima. Lakukan ini agar saat membaca dari database, Anda dapat membuat objek tanggal / waktu dalam format. Terkadang tidak ada perubahan kode yang diperlukan untuk menyediakan klausul ini - cukup setel zona waktu sistem di semua server ke.
Persyaratan sistem tidak perlu sepenuhnya menampilkan waktu lokal yang disimpan dan / atau offset zona waktu. Misalnya pada tiket pesawat, waktu keberangkatan dan kedatangan harus tertera pada zona waktu yang sesuai dengan lokasi bandara. Atau, jika server mengirimkan faktur yang dibuat di negara / kawasan berbeda untuk dicetak, setiap faktur harus diakhiri dalam waktu lokal, bukan dikonversi ke zona waktu server.
Semua nilai tanggal dan waktu dalam sistem-mendeskripsikan masa depan atau masa lalu yang sesuai dengan satu nilai di. Misalnya, atau. Jumlah peristiwa ini akan berbeda di zona waktu yang berbeda, tetapi akan menggambarkan titik waktu yang sama. Namun, dalam beberapa kasus, persyaratan perangkat lunak mungkin menyiratkan waktu setempat. Misalnya,. Ternyata tampilan program tersebut bukan hanya satu peristiwa, melainkan beberapa peristiwa, dan semua peristiwa tersebut dapat terjadi pada interval waktu yang berbeda-beda di sepanjang skala. Dalam kasus pelanggaran kondisi pertama, masalah dapat diselesaikan dengan menggunakan tipe data yang berisi zona waktu di server dan database. Berikut ini adalah beberapa pilihan contoh untuk berbagai platform dan. nilai
Waktu perlu disimpan hanya untuk tampilan, tidak ada tugas untuk menentukan waktu kapan suatu peristiwa terjadi atau akan terjadi dalam zona waktu tertentu - cukup menonaktifkan konversi waktu saja sudah cukup. Misalnya, pengguna memasuki awal siaran semua cabang perusahaan TV pada 26 Maret 2017, dan itu akan dikirim, disimpan, dan ditampilkan dalam formulir ini. Namun, ada kemungkinan bahwa beberapa penjadwal harus secara otomatis melakukan operasi khusus (mengirim pemberitahuan atau memeriksa database perusahaan TV untuk data tertentu) satu jam sebelum dimulainya setiap program. Mengimplementasikan penjadwal seperti itu secara andal tidaklah mudah. Asumsikan bahwa perencana mengetahui zona waktu di mana setiap cabang berada. Setelah beberapa saat di negara tempat kantor cabang berada, diputuskan untuk mengubah zona waktu. Situasi ini tidak sesering kelihatannya-dalam dua tahun terakhir, saya menghitung lebih dari 11 kejadian serupa (/ news / time /). Ternyata pengguna harus selalu memperbarui pengikatan zona waktu, atau penjadwal harus secara otomatis mendapatkan informasi ini dari sumber daya global seperti zona waktu. Saya tidak bermaksud memberikan solusi umum untuk situasi seperti itu, saya hanya memperhatikan bahwa situasi seperti itu memerlukan studi yang cermat. klien
Seperti yang Anda lihat di atas, tidak ada satu cara untuk menutupi 111% dari situasi tersebut. Oleh karena itu, pertama-tama, Anda perlu memahami dengan jelas dari persyaratan mana dari situasi di atas yang akan muncul dalam sistem. Kemungkinan besar, semuanya akan terbatas pada metode penyimpanan yang disarankan pertama. Nah, situasi khusus yang dijelaskan tidak akan membatalkannya, tetapi hanya menambahkan solusi lain untuk situasi khusus. Misalkan kita menemukan tampilan tanggal dan waktu yang benar dengan mempertimbangkan zona waktu pelanggan. Mari kita lanjutkan membahas tanggal tanpa waktu dan mulai dengan contoh untuk situasi ini. Apa yang terjadi jika Anda menggunakan jenis dan mekanisme yang sama dengan tanggal dan waktu untuk nilai tersebut? Meskipun hanya tanggal yang ditentukan saat membuat objek seperti itu, waktu tetap ada dan sama dengan: 1. Jika kita mengonversi nilai dengan offset +2 menjadi +1, kita akan mendapatkan. Untuk contoh di atas, ini setara dengan fakta bahwa di satu zona waktu, kontrak baru akan dimulai pada 2 Februari, dan di zona waktu lain-1 Februari. Dari sudut pandang hukum, ini tidak masuk akal, dan tentu saja seharusnya tidak demikian. Aturan umum untuk tanggal sangat sederhana - nilai seperti itu tidak boleh dikonversi pada tahap penyimpanan dan pembacaan apa pun. Jika platform mendukung tipe yang mewakili tanggal tanpa waktu, tipe itu harus digunakan. Teruskan tanggal dari klien dan berikan kembali sebagai string dan simpan sebagai tanggal. Jika pelanggan tidak hanya perlu menampilkan tanggal, tetapi juga perlu melakukan beberapa operasi pada tanggal (perbandingan, pengurangan, dll.), Metode ini sangat merepotkan. pada
Diteruskan dan disimpan sebagai string, lalu dikonversi ke tanggal yang hanya digunakan untuk pemformatan berdasarkan lokal klien. Ini memiliki lebih banyak kerugian daripada opsi sebelumnya-misalnya, jika bagian dari tanggal dalam string yang disimpan salah, tidak mungkin melakukan pencarian indeks yang efektif dalam rentang tanggal tersebut. Tentu saja, Anda dapat mencoba memberikan counterexample, dengan mengatakan bahwa kontrak hanya masuk akal bila negara / kawasan tempat kontrak ditandatangani berada dalam zona waktu yang sama, sehingga Anda dapat menentukan dengan jelas tanggal efektifnya. Tetapi bahkan dalam kasus ini, pengguna di zona waktu lain tidak akan tertarik pada jam berapa acara tersebut dalam waktu lokal. Selain itu, meskipun perlu untuk menampilkan momen ini, perlu ditampilkan tidak hanya tanggal tetapi juga waktu, yang bertentangan dengan kondisi awal.

Dengan penyimpanan dan pemrosesan interval waktu, semuanya sederhana: nilainya tidak bergantung pada zona waktu, jadi tidak ada rekomendasi khusus di sini. Mereka dapat disimpan dan dikirim dalam beberapa unit waktu (integer atau floating point, tergantung pada presisi yang dibutuhkan). Jika ketepatan kedua itu penting - dalam hitungan detik, jika dalam milidetik - dalam milidetik, dan seterusnya.

Tetapi perhitungan interval mungkin memiliki jebakan.
Sekilas, tidak ada masalah di sini, tapi tidak. Pertama-tama, mungkin ada masalah dengan pengujian unit kode tersebut, tetapi kita akan membahasnya nanti. Kedua, mari kita bayangkan bahwa pertama kali adalah musim dingin dan yang terakhir adalah musim panas (misalnya, jam kerja diukur dengan cara ini, dan pekerja memiliki shift malam). Berjam-jam, terlepas dari kenyataan bahwa 8 jam telah berlalu di antara saat-saat ini. Setiap operasi aritmatika dengan tanggal dan waktu harus dilakukan dengan menggunakan nilai atau tipe yang menyimpan informasi tentang zona waktu. Kemudian terjemahkan kembali ke lokal sesuai kebutuhan. Dari perspektif ini, contoh asli dapat dengan mudah diperbaiki dengan mengubah ke. tidak
Nuansa ini tidak bergantung pada platform atau bahasa tertentu. Tidak ada tipe umum yang menyimpan jadwal di perpustakaan standar. Tetapi tugas seperti itu jarang terjadi, jadi solusi siap pakai dapat ditemukan tanpa masalah. Format penjadwal adalah contoh yang baik, yang digunakan dalam satu bentuk atau lainnya dalam solusi lain (misalnya: - / / /). Ini mencakup hampir semua persyaratan penjadwalan, termasuk opsi jenis.

Dalam kebanyakan kasus, tidak masuk akal untuk menulis penjadwal Anda sendiri, karena ada solusi yang fleksibel dan terbukti waktu, tetapi jika karena alasan tertentu Anda perlu membuat mekanisme Anda sendiri, Anda setidaknya dapat meminjam dari format jadwal. Selain saran di atas tentang menyimpan dan menangani berbagai jenis nilai waktu, saya ingin membicarakan beberapa saran lainnya. Pertama-tama, tentang menggunakan anggota kelas statis untuk mendapatkan waktu saat ini -, (), dll. Seperti yang disebutkan sebelumnya, menggunakannya secara langsung dalam kode akan sangat mempersulit pengujian unit, karena tanpa kerangka simulasi khusus, itu tidak akan dapat menggantikan waktu saat ini. Oleh karena itu, jika Anda berencana untuk menulis pengujian unit, Anda harus menyadari bahwa Anda dapat mengganti implementasi metode tersebut.
Kemudian tambahkan antarmuka ini ke antarmuka ini di semua unit kode yang perlu mendapatkan waktu saat ini. Selama eksekusi program normal, implementasi akan dimasukkan di semua tempat ini, yang akan mengembalikan waktu aktual saat ini, dan implementasi lain yang diperlukan akan dimasukkan ke pengujian unit. Dari segi pengujian, metode ini paling fleksibel. Gunakan metode untuk mendapatkan waktu saat ini dan kemampuan untuk menginstal implementasi metode ini dari luar untuk membuat kelas statis Anda sendiri. Misalnya, untuk #code, kelas ini dapat mengekspos atribut dan metode (<>). Dengan menggunakan properti atau metode statis untuk mengetahui waktu saat ini, tidak perlu menulis dependensi secara eksplisit pada antarmuka tambahan di mana pun, tetapi dari sudut pandang prinsip, ini bukan solusi yang ideal. Namun, jika karena alasan tertentu opsi sebelumnya tidak sesuai, Anda dapat menggunakan opsi ini.

Masalah lain yang akan diselesaikan oleh penyedia yang bermigrasi ke waktu saat ini adalah memastikan bahwa tidak ada yang terus menggunakan kelas standar. Di sebagian besar sistem kontrol kualitas kode, tugas ini mudah diselesaikan. Pada dasarnya, intinya adalah mencari substring di semua file, kecuali file tempat implementasi dideklarasikan.

Ini adalah sesuatu yang tidak dapat dipercaya oleh klien. Waktu saat ini di komputer pengguna mungkin sama sekali berbeda dari waktu di komputer sebenarnya, dan jika ada koneksi logis, perbedaan ini dapat menghancurkan segalanya. Jika memungkinkan, semua tempat yang membutuhkan waktu saat ini harus dieksekusi di sisi server. Selain itu, seperti yang disebutkan sebelumnya, semua operasi aritmatika dengan waktu harus dilakukan sebagai nilai atau menggunakan jenis yang menyimpan offset zona waktu. Anda tidak tahu zona waktu mana yang dimiliki klien dan cara mengonversinya. Selain itu, jika klien menggunakan waktu transmisi tanpa menunjukkan bahwa itu (yaitu, saat Anda melepaskan transmisi offset kontrol), Anda tidak akan tahu apakah itu transmisi atau waktu lokalnya. Jauh lebih mudah untuk meminta waktu dengan offset yang ditentukan dengan jelas dari pelanggan-dalam hal ini, Anda tidak akan kehilangan informasi apa pun, tetapi Anda selalu bisa mendapatkan jaminan dari ini.
Di sana, tertulis dalam konten selanjutnya dari artikel ini bahwa berdasarkan persyaratan tertentu, metode ini tidak akan berfungsi, dan Anda perlu menyimpan offset zona waktu sebagai tambahan. Persyaratan ini selalu ada saat berkomunikasi dengan klien yang tidak dikenal — oleh karena itu, lebih mudah untuk tidak membuat aturan, dan toh tidak akan pernah terpenuhi. Jika klien tidak dikenal berarti tidak jelas siapa yang akan menggunakan server, maka saya setuju. Batasan ini mungkin tidak jelas bagi klien, juga tidak terduga. Saya akan memperbarui artikel nanti.
Pelanggan yang tidak dikenal berarti seseorang yang tidak Anda kendalikan sepenuhnya. Sekalipun kodenya sepenuhnya di bawah kendali Anda, ia diinstal pada perangkat yang tidak dikenal-dalam hal ini, ini adalah klien yang tidak Anda kenal karena Anda tidak tahu di zona waktu mana. Jika kode berada di bawah kendali penuh dan tidak ada persyaratan untuk menyimpan zona waktu klien, saya rasa tidak apa-apa untuk mengonversi ke klien sebelum mengirimnya. Ini pasti setara di sini-klien akan melakukan konversi dengan sendirinya, dan itu akan mengirimkan waktu lokal + offset ke server sehingga server itu sendiri telah melakukan konversi ini.
Klien akan melakukan konversi dengan sendirinya, dan itu akan mengirimkan waktu lokal + offset ke server sehingga server itu sendiri telah melakukan konversi ini. Misalnya, pelanggan mengira zona waktunya adalah +4, meskipun untuk semua alasan yang masuk akal, dia harus berpikir +3). Ini bekerja paling baik jika Anda melewatkan zona waktu (sebagai nama) dan mengimbangi pada saat yang sama, tetapi ini di luar standar dan jarang diterapkan. Apakah informasi ini tentang kompensasi untuk dukungan lebih lanjut? Jadi nanti Anda dapat melihat dari mana kesalahan offset berasal? Jika demikian, oke, saya mengerti. Untuk dukungan teknis, logika rumit lainnya di server, pengambilan keputusan ... Jika Anda memiliki informasi dan penyimpanannya tidak memberi Anda (banyak) energi ekstra, jangan membuangnya. Anda tidak dapat mengambilnya kembali.
Ini adalah saat waktu klien tidak muncul di mana pun dalam database sebagai stempel waktu sama sekali, dan hanya waktu database yang digunakan di mana saja (untuk, itu ()), sehingga klien tidak dapat dipercaya secara ideal.
Namun, tanpa perjalanan bolak-balik server-klien-server yang tidak perlu, ini tidak akan pernah dapat dilakukan secara efisien. Dalam kasus ini, biasanya di awal sesi klien / server, waktu database dikirim ke klien bersama dengan beberapa respons server yang berguna (misalnya, konfirmasi otorisasi). Klien kemudian menghitung selisih antara waktu dan waktu yang diterima dari server berdasarkan jamnya, menghitung koreksi, dan menggunakan koreksi ini saat mengirimkan stempel waktu ke server. Tentu saja, waktu yang dibutuhkan paket untuk dikirimkan dari klien ke server salah, tetapi lebih baik daripada hanya mengirimkan waktu pada klien. Misalnya, saya menggunakan metode ini untuk token otorisasi dengan masa pakai sekitar satu menit.

Saya selalu ingin memainkannya, tetapi sekarang itu terbukti menjadi alasan yang bagus.

Haruskah batas waktu untuk eksekusi order ditampilkan? Masalah seperti itu harus dijelaskan dengan jelas kepada pelanggan dan dicatat dalam dokumen, daripada memainkan permainan semacam itu.
Ini adalah masalah ketika saya melewati tanggal tanpa konversi dan zona waktu. Bagi saya, ini adalah posisi yang tidak stabil. Contoh yang Anda berikan bukannya tanpa tanggal. Jika pengelola hanya memasukkan tanggal, waktu pelaksanaan yang diperlukan harus ditampilkan sebagai tanggal + waktu, yang dengan sendirinya bertentangan dengan kondisi awal. Selain itu, menetapkan tenggat waktu tanpa waktu akhir itu sendiri tampaknya bukan keputusan yang baik. Jika saya menyelesaikan tugas pada malam 1 Februari (waktu Moskow) atau 2 Februari, meskipun tanggal pelaksanaannya adalah 1 Februari, apakah tidak ada perbedaan antara kedua waktu tersebut untuk perusahaan?
Di cabang dan perjalanan bisnis, agar tidak memainkan permainan ini, mereka dipandu oleh waktu organisasi yang unggul.
Berapa detik telah berlalu sejak 1 Januari 1971? dan
Jika Anda benar-benar perlu menampilkannya kepada pengguna, simpan di bidang terpisah. Jika semua tipe ada untuk waktu yang lama, mengapa semua operasi di atas perlu dilakukan secara manual? Bukankah konversi Anda antara format final dan format pengguna sepeda manual? Apakah waktu ini ditampilkan dari zona waktu yang berbeda? Apa bedanya dengan apa yang Anda katakan? Yang dijelaskan dalam artikel ini adalah menyimpan data sebagai waktu. Saya ingin tahu bagaimana solusi Anda berbeda darinya. Bagaimanapun, titik awal waktunya adalah, begitu juga dengan stempel waktu itu sendiri. Metode lama Anda hanya menggunakan jenis bilangan bulat, yang diganti sangat awal dengan jenis yang menunjukkan hasil yang baik saat membaca dari dasar dan debugging, dan kelas di platform itu sendiri dapat menggunakan metode utilitas untuk seluruh konversi ...
Baru dan bagus, sudah lama menjadi norma. Ini pada dasarnya mengatakan identitas Anda - apa yang perlu disimpan di dunia. Hanya saja Anda mengatakan bahwa Anda perlu menyimpan sejumlah detik di dalamnya untuk tujuan ini, dan saya mengatakan bahwa ada jenis yang siap pakai untuk tujuan ini, dan sebagai tambahan, Anda dapat menyimpan offset zona waktu jika diperlukan. Apa pertanyaannya? Hanya saja dalam banyak kasus, lebih mudah untuk memikirkan tentang stempel waktu, karena stempel hanya mewakili waktu absolut di alam semesta dan tidak ada hubungannya dengan zona waktu, jadi tidak perlu membicarakan tentang konversi apa pun, Anda hanya perlu membandingkan angka dan mentransfer angka dari satu area ke area lain. , Terapkan satu atau zona waktu lain untuk menampilkan stempel waktu. SETTING FORMULIR TANPA HARUS LOGIN GOOGLE DAN CARA TUTUP PENDAFTARAN

NameEmailWebsite

Leave a Reply

Your email address will not be published. Required fields are marked *