Thread Datum der Sonnenwenden berechnen (29 answers)
Opened by bianca at 2014-01-14 08:50

bianca
 2014-01-16 19:57
#173017 #173017
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Das lässt mich nicht los, daher habe ich mal ein Gerüst nach dem Wikipedia Artikel gebaut.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl
use strict;
use warnings;
use Date::Calc qw(leap_year Localtime Mktime);
use 5.010;

foreach my $set (
    '2010,21.06.2010',
    '2011,21.06.2011',
    '2012,21.06.2012',
    '2013,21.06.2013',
    '2014,21.06.2014',
    '2015,21.06.2015',
    '2016,21.06.2016',
    '2017,21.06.2017',
    '2018,21.06.2018',
    '2019,21.06.2019',
    '2020,20.06.2020',
) {
    my ($jahr,$erg) = split /,/,$set;
    my $test = sw($jahr);
    say "$jahr = $test ".($test eq $erg ? 'OK' : "FEHLER!!, $erg erwartet!!");
}

sub sw {
    my $fixpunkt = Mktime(2012,6,21,1,9,0); # 21.06.2012 01:09 Uhr MESZ (ist ein Schaltjahr)
    my $diff = abs($_[0] - 2012);
    my $verschiebung = $diff * 6 * 60 * 60; # 6 Stunden später pro Jahr
    my $bewegung = ($_[0] < 2012 ? -1 : 1);
    my $j = 2012;
    while ($j != $_[0]) {
        $j += $bewegung;
        if (leap_year($j)) {
            $verschiebung -= 18 * 60 * 60;  # 18 Stunden früher in Schaltjahren
            $verschiebung += 366 * 24 * 60 * 60 * $bewegung;
        }
        else {
            $verschiebung += 365 * 24 * 60 * 60 * $bewegung;
        }
    }
    sprintf('%02d.%02d.%04d',reverse((Localtime($fixpunkt + $verschiebung))[0..2]));
}


Ganz weit weg bin ich nicht aber die Verschiebung passt nicht richtig.
Quote
2010 = 22.06.2010 FEHLER!!, 21.06.2010 erwartet!!
2011 = 22.06.2011 FEHLER!!, 21.06.2011 erwartet!!
2012 = 21.06.2012 OK
2013 = 21.06.2013 OK
2014 = 21.06.2014 OK
2015 = 21.06.2015 OK
2016 = 21.06.2016 OK
2017 = 21.06.2017 OK
2018 = 21.06.2018 OK
2019 = 22.06.2019 FEHLER!!, 21.06.2019 erwartet!!
2020 = 21.06.2020 FEHLER!!, 20.06.2020 erwartet!!

Weiß jemand, was falsch ist?
10 print "Hallo"
20 goto 10

View full thread Datum der Sonnenwenden berechnen