Merhaba, insanların doğum günlerini YYYY-AA-DD formatıyla string (strcmp) fonksiyonlarıyla karşılaştırabilirim. Ama doğum gününü 7 gün veya not_de gösterecek kişinin doğum günü ile karşılaştırmak istiyorum. "time.h" kütüphanesini aradım ama başaramadım. Eğer yardım edersen memnun olurum.C ile tarihlerin karşılaştırılması (time.h kütüphanesini kullanarak)
cevap
Ben time_t
değerlerine difftime
kullanmak ve bir hafta içinde saniye sayısı karşılaştırmak istiyoruz ...
öylesine nasıl dize bugünkü date.and karşılaştırmak için bir time_t değişkeni "2010-11-10" dize dönüştürebilirsiniz ve ayrıca bir dosyanın – quartaela
bir kişinin doğum günü dize okuyorum değerleri "bir struct tm' ve sonra 'time_t' değerini almak için' mktime''ı kullanın. Sadece kullanılmayan alanların 0'a kadar temizlendiğinden emin olun. –
iyi arkadaşım sanırım bu mktime bu kişinin hangi gün doğduğunu gösterecektir. ama programın yürütüldüğü zaman kişinin doğum gününün 7 gün içinde yaklaşması gerekiyor. – quartaela
doğum tarihi ile yapı tm doldurma ve bir time_t bu dönüştürün.
Geçerli time_t öğesini time() kullanarak alın.
Bir hafta 86400 * 7 saniyedir.
Doğum tarihi time_t ile geçerli time_t arasındaki farkı kontrol edin.
, bu nedenle günümüzün tarihini karşılaştırmak için bir time_t değişkenindeki "2010-11-10" dizesini nasıl dönüştürebilirim. ve ayrıca bir kullanıcının doğum günü dizesini bir dosyadan okuyorum. – quartaela
struct tm
dizesini dönüştürmek için strptime
işlevini istiyorsunuz. Posix'in bir parçası, ama C standardı değil. http://www.cs.potsdam.edu/cgi-bin/man/man2html?3+strptime, strptime
kullanım kılavuzuna sahiptir. giriş tarihi önümüzdeki hafta içinde ise
Daha sonra, tm_mday
alana 7 eklemek bir time_t
(mktime
ile) sonucu dönüştürmek ve sonra (time(NULL)
itibaren) geçerli zamana karşılaştırmak, böylece görmek istiyorum .
C standardı uyarınca, time_t
değerlerinde aritmetik yapmak için taşınabilir değildir, bu nedenle, bunun yerine struct tm
alanlarını değiştirmeniz gerekir. Benzer şekilde, difftime
'u kullanarak mevcut zamanla karşılaştırmayı yapmanız gerekir.
Aşağıdaki örnek program, argüman satırındaki belirli bir dizeyi gün sayısına dönüştürür. Örnek çıktı:
% ./nd 2011-06-18 1971-02-10 invalid 2010invalid
38 days
-14699 days
2147483647 days
2147483647 days
Düzenleme: -1 bunun yerine INX_MAX kullanarak güzel bir başarısızlık göstergesi olmadığını karar verdi.
#include <sys/param.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#define ONE_DAY (24 * 3600)
int main(int argc, char *argv[])
{
int i;
if(argc < 2)
return (64); // EX_USAGE
for(i=1; i < argc; i++)
{
time_t res;
res = num_days(argv[i]);
printf("%d days\n", res);
}
return(0);
}
int num_days(const char *date)
{
time_t now = time(NULL);
struct tm tmp;
double res;
memset(&tmp, 0, sizeof(struct tm));
if(strptime(date, "%F", &tmp) == NULL)
return INT_MAX;
res = difftime(mktime(&tmp), now);
return (int)(res/ONE_DAY);
}
dostum ne yaptın: D. "#include
sys/param.h sistem için parametreler içerir.Diğerleri arasında, bir tamsayı türünün tutabileceği maksimum değer olan INT_MAX'ı tanımlar. Ayrıca, bir yolun sahip olabileceği maksimum uzunluk olan MAXPATHLEN'i de tanımlar. Ve evet, eğer num_days sonucu> 0 ve <= 7 ise, o zaman "Kullanıcı bir hafta içinde bir doğum gününe sahiptir!" Diyebilirsiniz. Ah ve ben memset kullanırız, çünkü strptime sadece biçim dizgisinde belirtilen struct tm bölümlerini doldurur, bu yüzden memset undefined parçaların şimdi 0 olarak tanımlandığından emin olur. – Mel
ben sadece test için kod yapıştırın kopyalayın ve bir hata verir "newfile.c: 37: 40: uyarı: işaretçi ve tamsayı arasındaki karşılaştırma" satırı için "if (strptime (tarih,"% F ", & tmp) == NULL)" _ ?. – quartaela
- 1. Kod çözme işlevini kullanarak Oracle'da tarihlerin karşılaştırılması
- 2. SQL - Bir tablodaki tarihlerin karşılaştırılması
- 3. Eski dosyaları denetlemek için tarihlerin karşılaştırılması
- 4. F # projesinde C# kütüphanesini kullanarak?
- 5. Bir DateTime alanının MySQL yok sayma zaman bölümündeki tarihlerin karşılaştırılması
- 6. C++ ile Boost :: regex.hpp kütüphanesini nasıl kullanabilirim?
- 7. c kütüphanesinde kütüphane kütüphanesini kullanma
- 8. jfeinstein10 kütüphanesini kullanarak sürgülü menü
- 9. Sys/time.h pencerede nasıl kullanılır?
- 10. FPGA'nın ASIC tasarımı ile karşılaştırılması
- 11. 2 tarihin momentJS ile karşılaştırılması
- 12. jsTestDriver ile kapatma kütüphanesini kullanma
- 13. Twitter'da Oauth için Scribe kütüphanesini kullanarak geri arama url'si ile
- 14. Joda saatini kullanarak iki tarihin karşılaştırılması
- 15. Destek kütüphanesini kullanarak SearchView Widget'ini tasarlayın v21
- 16. oracle geçersiz biçim modeli, tarihlerin karşılaştı? Ile
- 17. Tüm Diziye Tek Bir Değerin Karşılaştırılması? (C#)
- 18. Tarihlerin farklarının hesaplanması Postgresql
- 19. Broşür kütüphanesini kullanarak açılır pencereyi çizme
- 20. Elixir'deki Tarihlerin Sıralama Listesi
- 21. Xamarin'deki Swift kütüphanesini kullanma
- 22. karşılaştırılması nesneler
- 23. Boolean'larla ArrayLists Karşılaştırılması
- 24. cypher/neo4j ile dizi değerlerinin karşılaştırılması
- 25. Bir NSDate öğesinin [NSDate date] ile karşılaştırılması
- 26. Alaşım - birinci dereceden mantık ile karşılaştırılması
- 27. Ayrı .txt dosyalarındaki sütunların karşılaştırılması
- 28. hata desteği kütüphanesini
- 29. Farklı şekillerdeki matrislerin karşılaştırılması
- 30. Bir XML dizgisini libxml2 kütüphanesini kullanarak XML belgesi yerine ayrıştırma
Bu ev ödevi mi? –