• 01-03-2022, 21:14:41
    #1
    Merhabalar,
    Geliştirdiğim projede zaman dilimiyle ilgili takıldığım bir konu var.
    Sunucuda şuan yerel saat dilimi (Örn. Sunucu istanbul'da ise +03:00) kullanıyorum. Sunucuya veri gönderen cihazlar hem UTC formatında hem de yerel saat zaman dilimi formatında veri gönderiyor.
    Sunucu nerede olursa olsun (New York, İstanbul, Tokyo) UTC (00:00) formatında olup veri gönderen cihazların da UTC formatında veri göndermesi mi daha doğru olur yoksa,
    Sunucu yerel saat zaman diliminde olup veri gönderen cihazların saat bilgisine sunucunun bulunduğu yerel saat zaman dilimini mi eklemek daha doğru olur.

    Veritabanında biriken veriler web ortamında gösterileceği için eğer UTC 0 formatında veri kaydedersem kullanıcı hangi zaman dilimine göre verileri görüntülemek istiyorsa o şekilde görüntüler, Yerel zaman dilimi kullanırsam sanıyorum bir karmaşaya sebep olacak.

    Bu konuda fikirlerinizi, tecrübelerinizi bekliyorum, teşekkürler.
  • 01-03-2022, 21:30:18
    #2
    Date formatı yerine Unixtimestamp ile işlem yapabilirsiniz. Ekrana yazdırma gibi durumlarda cihazın timezone’una göre date formatına çevirebilirsiniz.
  • 01-03-2022, 22:21:29
    #3
    Dogukan adlı üyeden alıntı: mesajı görüntüle
    Date formatı yerine Unixtimestamp ile işlem yapabilirsiniz. Ekrana yazdırma gibi durumlarda cihazın timezone’una göre date formatına çevirebilirsiniz.
    Bazı cihazlar utc formatında datetime gönderiyor, bazıları ise timestamp olarak gönderiyor. Her iki durumda da datetime olarak veritabanına kaydediyorum. Unix Timestamp (bigint) veri türünde veritabanına kaydedersem geçmşe dönük sorgulamalarda performans kaybına neden olur mu diye çekimser davrandım.
  • 01-03-2022, 23:09:00
    #4
    emrahe adlı üyeden alıntı: mesajı görüntüle
    Bazı cihazlar utc formatında datetime gönderiyor, bazıları ise timestamp olarak gönderiyor. Her iki durumda da datetime olarak veritabanına kaydediyorum. Unix Timestamp (bigint) veri türünde veritabanına kaydedersem geçmşe dönük sorgulamalarda performans kaybına neden olur mu diye çekimser davrandım.
    O halde UTC0 olarak işlem yapmak yine gerekli yerlerde cihazın timezone’una göre işlem yapmak en doğrusu olacaktır. Normalde unix timestamp taraftarıyım ama son projemde ben de bu şekilde yapmıştım.
  • 02-03-2022, 00:05:43
    #5
    Dogukan adlı üyeden alıntı: mesajı görüntüle
    O halde UTC0 olarak işlem yapmak yine gerekli yerlerde cihazın timezone’una göre işlem yapmak en doğrusu olacaktır. Normalde unix timestamp taraftarıyım ama son projemde ben de bu şekilde yapmıştım.
    Uygulama kısmında UTC-0 dönüşümünü sağladım ancak veritabanı kısmında UTC-0 ayarlamaya çalıştığımda içinden çıkamadığım bir sorunla karşılaştım
    Gps takip sisteminde örneğin 02.03.2022 02:00:00'da konum gönderen cihazın UTC saati 01.03.2022 23:00:00 olarak veritabanına kaydediliyor.Cihazın günlük km bilgisini tuttuğum veritabanında günlük tarih olarak kayıtlar tutuluyor.Utc-0 formatını uyguladığımda cihaz aslında 02.03.2022 02:00:00 saatinde konum gönderdiği için 02.03.2022 tarihi için günlük km bilgisi olması gerekir ancak, UTC-0 uygulandığı için saat 23:00:00-23:59:59 arasındaki km bilgisi bir önceki güne yazılmış oluyor. Dolayısıyla günlük km bilgisinde eksiklik olmasına sebep oluyor.
    Günlük km bilgisini tuttuğum tabloya zaman dilimleri için ayrı kolonlarda da km bilgisi tutmak istemiyorum. Bir fikriniz var mı?
  • 02-03-2022, 00:22:44
    #6
    Mysql kullanıyorsanız CONVERT_TZ fonksiyonunu denediniz mi? Bütün verileri daima utc0 olarak kaydedip, Örneğin;

    select COALESCE(SUM(km),0) from car_kms where id = @x and CONVERT_TZ(created_at,'+00:00','+03:00') BETWEEN '2022-03-02 00:00:00' and '2022-03-02 23:59:59'
  • 02-03-2022, 00:30:50
    #7
    Dogukan adlı üyeden alıntı: mesajı görüntüle
    Mysql kullanıyorsanız CONVERT_TZ fonksiyonunu denediniz mi? Bütün verileri daima utc0 olarak kaydedip, Örneğin;

    select COALESCE(SUM(km),0) from car_kms where id = @x and CONVERT_TZ(created_at,'+00:00','+03:00') BETWEEN '2022-03-02 00:00:00' and '2022-03-02 23:59:59'
    Veritabanı olarak MsSql Server kullanıyorum.
    Sizin son gönderdiğiniz sorgu ile aslında amacıma ulaşırım ancak cihaz konumlarında milyonlarca veri oluyor bu yüzden sürekli günlük km yi filtrelemek performansa olumsuz etki eder. Dolayısıyla her konum eklendiğinde ayrı bir tabloda ilgili cihaz için aşağıdaki gibi bir veri birikmeye başlıyor. Örneğin bugün tarih 2022-02-23 ise tablodan TARIH kolonuyla filtreleme yapılarak MESAFE bilgisi hızlıca alınmış oluyor. İşte tam bu noktada veriler bu tabloya kaydedilirken UTC-0 formatı uygulanırsa bir sonraki günde olması gereken km bilgisi bir önceki güne eklendiği için km kaybına sebep oluyor.

    BU VERİLER CİHAZ KONUMLARINDAN AYRI TUTULAN TABLOYA KAYIT EDİLİYOR