SORU
30 AĞUSTOS 2008, CUMARTESİ


Biz 2038 hazırlanmak için ne yapmalıyım?

Bugün yazıyorum yazılımın 30 yıl içinde kullanılacak düşünmek isterim. Ama aynı zamanda bir sürü 1970 yılından bu yana saniye sayısı zaman açığa UNIX geleneğine dayalı olduğunun farkındayım.

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

void print(time_t rt) {
    struct tm * t = gmtime(&rt);
    puts(asctime(t));
}

int main() {
    print(0);
    print(time(0));
    print(LONG_MAX);
    print(LONG_MAX 1);
}

Yürütme sonuçları:

  • Thu Jan 1 00:00:00 1970
  • Sat Aug 30 18:37:08 2008
  • Sal Oca 19 03:14:072038
  • Dec 13 20:45:52 Cum1901

Fonksiyonları ctime(), gmtime () ve localtime() bütün al argüman olarak bir saat değerini temsil eden süreyi saniye beri Epoch (00:00:00 UTC 1 Ocak 1970; zaman(3) ).

Ben eğer bir şey bir programcı olarak bu alanda yapmak için proaktif olup olmadığını merak, ya da bu güven için hepimiz yazılım sistemleri (nam-ı diğer İşletim Sistemleri) nasıl sihirli bir gelecekte yükseltilir?

GüncellemeGerçekten de 64-bit sistemlerde bu güvenli olduğu görünüyor:

import java.util.*;

class TimeTest {
    public static void main(String[] args) {
        print(0);
        print(System.currentTimeMillis());
        print(Long.MAX_VALUE);
        print(Long.MAX_VALUE   1);
    }

    static void print(long l) {
        System.out.println(new Date(l));
    }
}
  • 1969 PST Çrş Ara 31 16:00:00
  • Sat 30 12:02:40 PST 2008 Ağustos
  • Sat Aug 16 23:12:55 PST292278994
  • Sun May 02 08:47:04 PST292269055

Ama bu yıl ne olacak 292278994?

CEVAP
20 EKİM 2008, PAZARTESİ


Zaman için taşınabilir yedek yazdım.(şu anda sadece localtime(), gmtime(), mktime işlevi() ve timegm()) h bile 32 bit makinelerde 64 bit zaman kullanır. Zaman için bir yedek olarak C projelere kesilmesine yöneliktir.h. Perl'de kullanılıyor ve Ruby etmeye niyetim ve Python 2038 onunla ilgili sorunlarınız da. Bu sana /- 292 milyon yıl güvenli bir kenttir.

Kodu at the y2038 project bulabilirsiniz. Lütfen issue tracker herhangi bir soru göndermek için çekinmeyin.

Olarak "bu bir 29 yıl için bir sorun olmayacak", bu o list of standard answers incelemek. Kısacası, bir şeyler gelecekte olur ve bazen ne zaman bilmeniz gerekir. Ben de a presentation on the problem, what is not a solution, and what is var.

Oh, ve çoğu zaman sistemler 1970 öncesine dayanır kolu yok bunu unutma. 1970 şeyler, bazen zaman önce oldu.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • steeletraining

    steeletraini

    28 NİSAN 2010
  • TouchePro

    TouchePro

    27 EYLÜL 2007