Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Zaman fonksiyonları

Başlatan mr.engineer, 18 Temmuz 2021, 20:41:36

mr.engineer

Merhaba, C'de veya C++'da time.h kütüphanesindeki fonksiyonları kullanmak istedim. mktime, localtime vb. fakat bunlar 1970 yılından itibaren işlem yapabiliyorlar. C/C++ da buna benzer kullanabileceğim başka bir kütüphane var mı?

Mesela elimde şu şekilde bir tarih var 01/12/1958 buna x saniye eklediğimde çıktı olarak 13/02/1975 tarihini almak istiyorum. ctime kütüphanesindeki fonksiyonlar ile bu işlem yapılabiliyor fakat 1970 öncesi tarihlerde çalışmıyor.

Eğer fonksiyonu kendim yazmam gerekirse biraz sıkıntılı olacak gibime geldi. Saniyeyi gün ay ve yıla çevirmek gerekecek. Burada aradaki artık yılları ve 30/31 çeken ayları hesaba katmak gerekecek.

RaMu

#1
Detaylı düşünmedim ama:

Alıntı yapılan: mr.engineer - 18 Temmuz 2021, 20:41:36...
Eğer fonksiyonu kendim yazmam gerekirse biraz sıkıntılı olacak gibime geldi.
...

Şöyle bir ekleme ile basit bir çözüm olabilir:

Her 4 yılın karşılığı aynı saniye eder.

1- İşlem yapmak istediğin tarihi 4 veya katı yıl ekleyerek elindeki kütüphanenin işlem yapabildiği 1970 sonrasına çek.
2- Zaman farkı değerini kaydırılmış tarih için kütüphaneye hesaplat.
3- 2'de çıkan değer ile 1'de hesaplanan kaç dört yıl ekleme varsa topla, sonuç hazır.

Mesela 01.02.1969 ile 02.03.1971 için işlem yapılacaksa
yani değerlerden biri 1970 öncesi diğeri 1970-1974  arası ise ayrı değerlendirmek gerekecek.



Dahada basiti her iki tarihide 4 veya katı yıl ileri çekip 1970 öncesi tarihten kurtulmak.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fide

Biraz kaçak güreşmek olacak ama eğer windows ve excel kullanma şansın varsa excele hesaplatıp kullan. Excel 1900 tarihine kadar birebir hesaplıyor. 1.1.1900 tarihinden öncesi yok.  Arkaplanda excel açıp hesaplatıp kapatabilirsin.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

brandice5

time_t tipi 1970 den geriye doğru eksi değerde alabiliyor. nerede sorun yaşıyorsun?

Örneğin -1 için tarih "Wed Dec 31 23:59:59 1969"

mr.engineer

Alıntı yapılan: brandice5 - 19 Temmuz 2021, 00:51:50time_t tipi 1970 den geriye doğru eksi değerde alabiliyor. nerede sorun yaşıyorsun?

Örneğin -1 için tarih "Wed Dec 31 23:59:59 1969"

Hocam mktime, localtime fonksiyonları 1970 öncesi için çalışmıyor. Nasıl çalıştırdığınızı anlamadım örnek bir kod paylaşır mısınız? Bu fonksiyonlar epoch time olarak UNIX sistemlerde 1/1/1970 tarihini kullanıyormuş.

mr.engineer

Alıntı yapılan: RaMu - 18 Temmuz 2021, 21:20:13Detaylı düşünmedim ama:

Şöyle bir ekleme ile basit bir çözüm olabilir:

Her 4 yılın karşılığı aynı saniye eder.

1- İşlem yapmak istediğin tarihi 4 veya katı yıl ekleyerek elindeki kütüphanenin işlem yapabildiği 1970 sonrasına çek.
2- Zaman farkı değerini kaydırılmış tarih için kütüphaneye hesaplat.
3- 2'de çıkan değer ile 1'de hesaplanan kaç dört yıl ekleme varsa topla, sonuç hazır.

Mesela 01.02.1969 ile 02.03.1971 için işlem yapılacaksa
yani değerlerden biri 1970 öncesi diğeri 1970-1974  arası ise ayrı değerlendirmek gerekecek.



Dahada basiti her iki tarihide 4 veya katı yıl ileri çekip 1970 öncesi tarihten kurtulmak.

Bu tarz bir şey yapmayı düşünüyorum da artık yıl olayı kafamı karıştırdı:)

muhittin_kaplan


brandice5

Alıntı yapılan: mr.engineer - 19 Temmuz 2021, 12:18:30Hocam mktime, localtime fonksiyonları 1970 öncesi için çalışmıyor. Nasıl çalıştırdığınızı anlamadım örnek bir kod paylaşır mısınız? Bu fonksiyonlar epoch time olarak UNIX sistemlerde 1/1/1970 tarihini kullanıyormuş.

#include <stdio.h>
#include <time.h>

int main()
{
  time_t timeVal;
  struct tm *tmVal;
  
  time(&timeVal);
  printf("%s", ctime(&timeVal));
  
  timeVal -= 2345678901;
  
  tmVal = localtime(&timeVal);
  printf("%s", asctime(tmVal));
  
  tmVal->tm_year -= 30;
  printf("%s", asctime(tmVal));

  return 0;
}

mr.engineer

@brandice5 yazdığınız kod çalışmıyor

#include <stdio.h>
#include <time.h>

int main()
{
  time_t timeVal;
  struct tm *tmVal;
 
  time(&timeVal);
  printf("%s", ctime(&timeVal));
 
  timeVal -= 1626734660;
 
  tmVal = localtime(&timeVal);
  printf("%s", asctime(tmVal));
 
  tmVal->tm_year -= 30;
  printf("%s", asctime(tmVal));

  return 0;
}

timeVal -= 1626734660; yazdığınız kodda bu satırı bu şekilde güncelledim. Bu sayı için 1970 sınır yılında çalışıyor. Bu sayıyı artırırsanız 1970 yılının gerisine gidiyor ve hata veriyor.
Sizde nasıl çalıştığını anlayamadım yazdığınız kodu denediniz mi? Derleyicinizle ilgili de olabilir.


mr.engineer

Alıntı yapılan: brandice5 - 20 Temmuz 2021, 03:21:47@mr.engineer http://cpp.sh/6rina

Hocam derleyiciye göre değişiyor galiba, çünkü kendi bilgisayarımda iki farklı derleyici de deniyorum çalışmıyor. Farklı derleyicilerde bir çeşit extension olabilir.


The ctime(), gmtime() and localtime() functions all take an argument of data type time_t which represents calendar time. When interpreted as an absolute time value, it represents the number of seconds elapsed since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).


mr.engineer

Tüm fonksiyonları kendim yazdım sorun çözüldü:)

parametre

Iyı bayramlar bu arada eksik bilgileri olan arkadaslar için  fonksiyon kudlarınızı paylasırsanız ısık olmuş olursunuz