Data Stellare

Stato
Discussione chiusa ad ulteriori risposte.

Oromis92

Utente Silver
22 Dicembre 2007
102
12
2
84
direttamente da star trek, ecco l'orologio "stellare".

Codice:
#!/usr/bin/perl -w

($sec,$min,$hour,$giorni,$mese,$anno) = localtime(time);
$anno += 1900;

if (($anno % 4 == 0 && $anno % 100 != 0) || $anno % 400 == 0) {$k=1; $time=31622400} else {$k=0; $time=31536000};

if ($mese == 0) { $days = $giorni};
if ($mese == 1) { $days = 31 + $giorni};
if ($mese == 2) { $days = 59 + $k + $giorni};
if ($mese == 3) { $days = 90 + $k + $giorni};
if ($mese == 4) { $days = 120 + $k + $giorni};
if ($mese == 5) { $days = 151 + $k + $giorni};
if ($mese == 6) { $days = 181 + $k + $giorni};
if ($mese == 7) { $days = 212 + $k + $giorni};
if ($mese == 8) { $days = 243 + $k + $giorni};
if ($mese == 9) { $days = 273 + $k + $giorni};
if ($mese == 10) { $days = 304 + $k + $giorni};
if ($mese == 11) { $days = 334 + $k + $giorni};

$secs = ($days-1)*86400+$hour*3600+$min*60+$sec;

$stardate = (($secs*9999)/$time);
$stardate = "$anno.".sprintf("%.0f", $stardate);

print "\n> Data Stellare $stardate\n\n";

regole:
la data stellare sarà di questo tipo:
yyyy.xxxx
yyyy == anno attuale
xxxx == rappresentazione decimale dei secondi trascorsi sino ad adesso.

ovvero:
Codice:
9999 : numerodisecondinunanno = xxxx : numerodiseconditrascorsinoadadesso

xxxx = (9999*seconditrascorsi)/secondianno

il numero si secondi in un anno cambia a seconda della bisestilità


------ se c'è qualche fan di star trek saprà che la data stellare è un invenzione e che nella seria si utilizzavano solo numeri casuali. questa è invece la notazione dell'ultimo film.
 
Codice:
#include <iostream>

using namespace std;

int main() {
    int anni=1, d = time(0);

    while((d-=365*24*60*60) > 365*24*60*60 && ++anni);

    cout<<1970+anni<<"."<<1970*(365+((1970+anni)/4))*24*60*60LL+d;

    return 0;
}
 
se nn ho capito male come funziona:

Codice:
from time import localtime

y,s=localtime()[0],float(9999*localtime()[7]*24*60*60)/float(365*24*60*60)

print "%s.%s" % (y,s)
 
Scusa ma xxxx i secondi dall'anno 0 a oggi?
Codice:
#include <iostream>
using namespace std;
int main() {
    int d = time(0), anni=(d/(365*24*60*60));
    cout<<1970+anni<<"."<<1970*(365+((1970+anni)/4))*24*60*60LL+d;
    return 0;
}
in ogni modo ho modificato qualcosa.
 
Malex ha detto:
se nn ho capito male come funziona:

Codice:
from time import localtime

y,s=localtime()[0],float(9999*localtime()[7]*24*60*60)/float(365*24*60*60)

print "%s.%s" % (y,s)

Codice:
oromis92@localhost:~$ python aaa.py
2009.3780.44383562


oromis92@localhost:~$ perl stardata.pl
> Data Stellare 2009.3778

c'è qualcosa che non va...
 
Oromis92 ha detto:
Malex ha detto:
se nn ho capito male come funziona:

Codice:
from time import localtime

y,s=localtime()[0],float(9999*localtime()[7]*24*60*60)/float(365*24*60*60)

print "%s.%s" % (y,s)

Codice:
oromis92@localhost:~$ python aaa.py
2009.3780.44383562


oromis92@localhost:~$ perl stardata.pl
> Data Stellare 2009.3778

c'è qualcosa che non va...

uhm, la cosa + probabile è che nn abbia capito come funziona :asd:
 
stoner ha detto:
direi ..
Comunque continuo a ripetere la domanda.. xxxx rappresenta i secondi passati dall'anno 0 a oggi?

no
xxxx è la rappresentazione decimale dei secondi trascorsi quest'anno fino ad adesso.

tipo il 01/01/2009 alle 00:00:01 sarà 2009.0001
e il 31/12/2009 alle 23:59:59 sarà 1009.9999
 
ah.. allora ok
Codice:
#include <iostream>
using namespace std;
int main() {
    int d = time(0), anni=(d/(365*24*60*60));
    cout<<1970+anni<<"."<<d-(anni*365*24*60*60LL + (anni/4)*24*60*60);
    return 0;
}
Comunque nel tuo codice non è possibile che dal 01/01/2009 siano passati solo 3778 secondi.
#edit inoltre in un anno mica ci sono solo 9999 secondi :omfg: ma sono 60*60*24*365 secondi..
 
Esatto per questo si fa la proporzione che leggi nel primo post.

Esatto per questo si fa la proporzione che leggi nel primo post.
 
Vediamo se mi spiego meglio.
2009.3781 significa che siamo al 37.81% del 2009 e il 31 dicembre saremo al 99.99%

chiaro ?
 
si ma, così ogni 0.01% son passati 3153.6 secondi = 52.56 minuti = quasi un'ora

comodo, se non fosse che se ti dico "son le 2478" ci metti 5 minuti a capire che ore solo :omfg:

lol
 
Php:
PHP:
<?php
print date("Y").".".floor((9999 * (time() - mktime(0,0,0,1,1,date("Y")))) / (60 * 60 * 24 * (((int)date("Y") % 4 == 0) ? 366 : 365)));
?>
EDIT: ho provato quello di stoner e quello di oromis, ed ecco il risultato:
Codice:
Microsoft Windows Xp [Versione 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

Phate@nightmare~$: >php _wizard.php
2009.4672
Phate@nightmare~$: >perl oromis.pl

> Data Stellare 2009.4674


Phate@nightmare~$: >stoner
2009.14820275
Phate@nightmare~$: >
O_____O
 
Il mio non è giusto manca la proporzione, la seconda cifra indica i secondi passati dal primo dell'anno in corso e non la percentuale di secondi passati.
 
Si ma allora ho sbagliato io o ha sbagliato Oromis?
Ah comunque ho aggiornato il mio code, ora verifica anche se l'anno corrente è bisestile
 
[Python]
Codice:
#!/usr/bin/python
from time import localtime
print "%s.%s"%(localtime()[0],(9999*float(localtime()[7]*24*60*60))/float(60*60*24*365))
Tuttavia mi da circa 10 secondi in più di quello di Oromis...
 
Codice:
Microsoft Windows Xp [Versione 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

Phate@nightmare~$: >php phate.php
2009.4733
Phate@nightmare~$: >python opocaj.py
2009.4739.25205479

Phate@nightmare~$: >perl oromis.pl

> Data Stellare 2009.4735


Phate@nightmare~$: >
LOL
 
_Wizard ha detto:
Si ma allora ho sbagliato io o ha sbagliato Oromis?

io non sbaglio mai. e quando sbaglio, è giusto che sia sbagliato.
ecco :rulezmg:

ok avevo sbagliato. giustamente!
ecco il nuovo codice:
Codice:
#!/usr/bin/perl -w

($sec,$min,$hour,$giorni,$mese,$anno) = localtime(time);
$anno += 1900;

if (($anno % 4 == 0 && $anno % 100 != 0) || $anno % 400 == 0) {$k=1; $time=31622400} else {$k=0; $time=31536000};

if ($mese == 0) { $days = $giorni};
if ($mese == 1) { $days = 31 + $giorni};
if ($mese == 2) { $days = 59 + $k + $giorni};
if ($mese == 3) { $days = 90 + $k + $giorni};
if ($mese == 4) { $days = 120 + $k + $giorni};
if ($mese == 5) { $days = 151 + $k + $giorni};
if ($mese == 6) { $days = 181 + $k + $giorni};
if ($mese == 7) { $days = 212 + $k + $giorni};
if ($mese == 8) { $days = 243 + $k + $giorni};
if ($mese == 9) { $days = 273 + $k + $giorni};
if ($mese == 10) { $days = 304 + $k + $giorni};
if ($mese == 11) { $days = 334 + $k + $giorni};

$secs = ($days-1)*86400+$hour*3600+$min*60+$sec;

$stardate = int(($secs*10000)/$time);
$stardate = "0".$stardate if length($stardate) == 1;
$stardate = "$anno.$stardate";

print "\n>> $stardate <<\n\n";
 
Mha:
Codice:
Microsoft Windows Xp [Versione 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

Phate@nightmare~$: >perl a.pl

>> 2009.4753 <<


Phate@nightmare~$: >php a.php
2009.4751
Phate@nightmare~$: >
Vabbè lasciamo fare và
 
Stato
Discussione chiusa ad ulteriori risposte.