2010-01-05 23 views
18

Ci sono molte segnalazioni di sistemi che non riescono a capire l'anno 2010 ma non ho idea del perché. I sistemi attuali di cui mi occupo funzionano bene per quanto posso dire, ma mi piacerebbe sapere qual è il vero problema per cercare meglio.Che cosa sta causando gli errori del 2010?

Qualcuno potrebbe far luce su di esso per favore?

Edit: http://www.rte.ie/business/2010/0105/bug.html - informazioni su di esso che interessano le carte di credito in Germania

+3

Oh caro, è terribilmente vago. Hai qualche link da condividere? –

+0

Ho sentito qualcosa sull'interpretazione di '10' come numero esadecimale. – Gumbo

+15

È solo la preparazione per l'apocalisse del 2012. –

risposta

13

Diversi protocolli utilizzati nel settore bancario e delle telecomunicazioni - including the SMS protocol - codificare l'anno come BCD in un singolo byte.

Dal 2000-2009 si potrebbe facilmente fare l'errore di interpretare l'anno come numero binario di serie in quanto la codifica sarebbe lo stesso:

Encoding Binary-interpreted BCD-interpreted 
0x01  2001    2001 
0x02  2002    2002 
... 
0x09  2009    2009 
0x10  2016    2010 
... 

Questo è molto probabilmente la causa del bug di Windows Mobile.

4

Ho un sistema sul posto di lavoro che utilizza un campo anno una cifra. Sì. Una cifra Quindi il motivo per cui questo sistema sta fallendo è che "2000" è espresso come "2010".

+4

C'è/c'era qualche tipo di motivazione per quella decisione? – Paolo

+0

Non ne ho idea, e nessun vero modo di scoprirlo. – recursive

+11

"Non useremo mai questo software tra 10 anni a partire da ora." –

4

Quello di cui ho sentito parlare sono state le soluzioni rapide che le persone hanno fatto per Y2K senza pensarci. Quindi se xx < 10 poi 20xx altro 19xx.

+1

In realtà non è un exaplain il 16 –

+1

Da dove vengono 16? La domanda chiede solo se i sistemi non riescono a capire 2010. 0x10 = 16 potrebbe essere una ragione, certo. –

+0

Il bug 2010-2016 potrebbe non essere l'unico bug qui ... Questo potrebbe spiegare molto bene il problema delle banche tedesche. –

13

Una possibile spiegazione è nell'articolo qui sotto

http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/

Mi ricorda del vostro recente articolo sulle correzioni Y2K bug a basso costo e sporchi in cui alcuni programmatori senza scrupoli mettono in una semplice se < 10 = 20xx altrimenti la data è 19xx

+0

Sì, penso che l'hai inchiodato. –

+0

Windows, al momento, ha la stessa cosa. Gli anni a due cifre sono intreprettati come data tra il 1930 e il 2029. Il che rende il codice "se <30 = 20xx altrimenti la data è 19xx". La soluzione è quella di schiaffeggiare le persone, volentieri, usando anni a due cifre (compresi gli utenti finali) –

11

SpamAssassin aveva una regola per contrassegnare le date troppo lontano nel futuro come spam:

/20[1-9][0-9]/ 

La correzione è venuto un paio di giorni di ritardo, ma è abbastanza semplice:

/20[2-9][0-9]/ 

rivederti in dieci anni.

+2

Prima di tutto, però, devi scherzare. Ma poi ho controllato https://issues.apache.org/SpamAssassin/show_bug.cgi?id=6269. Non sembra troppo difficile per me confrontare due numeri interi a 4 cifre l'uno con l'altro. Perché usano espressioni regolari per questo? –

+14

Perché tutti lo sanno, se non riesci ad esprimerlo in un Regex, non vale la pena farlo ...;) – GalacticCowboy

+0

Potrebbe essere evitare la conversione di stringhe su interi? –

4

Potrebbe essere dovuto ai giovani sviluppatori che hanno iniziato la loro carriera dopo Y2K e utilizzano 1 cifra per rappresentare l'anno.

+2

Questo non sarebbe più caratteristico di uno sviluppatore più vecchio che ha più esperienza (a) riducendo al minimo queste rappresentazioni e (b) sviluppando i sistemi in cui è più probabile che accada? –

+2

Oppure potrebbero essere i consulenti Y2K che non hanno fatto abbastanza per ritirarsi :) –

4

Mi sono occupato di un po 'di fallimento del 2010 in un sito lo scorso fine settimana, ma era solo il risultato di una svista nella codifica.

qualcuno ha pensato che sarebbe stata una buona idea per impostare il valore di un elemento dell'elenco alla dateTime.year.Now corrente() quando la lista elementi conteneva solo fino al 2009.

ddlItem.findByText(DateTime.Now.Year.ToString()) 
2

È un errore in un componente che divide l'anno in due parti. La seconda parte viene utilizzata in un confronto in modo tale che la cifra 10 non si trovi nella base 10, è nella base 16 e significa che è 0x10 = 16 (hex).

2

Ho utilizzato Google Code Search a find y2010 bugs in open source software. Ho cercato uno schema particolare che indicasse un bug (uso di "200% d" come stringa di formato printf) e ho trovato diversi progetti con quell'errore. L'applicazione creativa dei pattern di ricerca potrebbe probabilmente generare più tipi di bug.

Problemi correlati