<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>johker's blog &#187; Datum</title>
	<atom:link href="http://johker.ibutho.de/tag/datum/feed/" rel="self" type="application/rss+xml" />
	<link>http://johker.ibutho.de</link>
	<description>stories about me, my life, science and my trips</description>
	<lastBuildDate>Sat, 29 May 2010 10:00:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Schaltjahre</title>
		<link>http://johker.ibutho.de/2008/08/17/schaltjahre/</link>
		<comments>http://johker.ibutho.de/2008/08/17/schaltjahre/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 07:24:10 +0000</pubDate>
		<dc:creator>johker</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Datum]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Schaltjahr]]></category>

		<guid isPermaLink="false">http://johker.ibutho.de/?p=21</guid>
		<description><![CDATA[Ein leidiges Thema. Man könnte meinen es sei ganz einfach ein Schaltjahr zu berechnen: Lässt sich ein Jahr ohne Rest durch 400 teilen, dann ist es ein Schaltjahr, lässt es sich ohne Rest durch 4 teilen, dann ist es auch ein Schaltjahr, lässt es sich aber ohne Rest durch 100 teilen, ist es kein Schaltjahr. [...]]]></description>
			<content:encoded><![CDATA[<p>Ein leidiges Thema. Man könnte meinen es sei ganz einfach ein Schaltjahr zu berechnen: Lässt sich ein Jahr ohne Rest durch 400 teilen, dann ist es ein Schaltjahr, lässt es sich ohne Rest durch 4 teilen, dann ist es auch ein Schaltjahr, lässt es sich aber <strong>ohne</strong> Rest durch 100 teilen, ist es <strong>kein</strong> Schaltjahr. Daraus folgt, dass das Jahr 2000 ein Schaltjahr ist, die Jahre 1800 und 1900 z.B. sind aber keine Schaltjahre, da sie sich zwar ohne Rest durch 4 teilen lassen, aber (leider) auch ohne Rest durch 100.</p>
<p>Wie ich darauf komme über Schaltjahre zu schreiben? Ganz einfach: ich habe zur Zeit beruflich mit dieser Problematik zu kämpfen und musste dabei leider feststellen, dass einige Programme Schaltjahre falsch berechnen. Zugegeben, Datumsarithmetik ist kein einfaches Thema, doch Schaltjahre sind - wie ich oben gezeigt habe - nun wirklich nicht schwer zu berechnen.<br />
Ein Negativbeispiel für die Schaltjahrberechnung ist das Linux Kommandozeilen-Tool <em>cal</em> und seine Abkömmlinge <em>calendar, ncal</em> und <em>ccal</em>. Für sie ist das Jahr 1700 fälschlicherweise ein Schaltjahr, wie auch das Jahr 1500. Das Jahr 1800 hingegen ist korrekterweise kein Schaltjahr. Ich weiß leider nicht wie sich dieser Fehler eingeschlichen haben kann und habe auch noch keinen Blick in den Quellcode geworfen, doch ich habe mir fest vorgenommen einen Bugreport einzureichen... wenn ich denn nur wüsste wo, denn das Tool <em>cal</em> hat wohl keine eigene Homepage. Falls also jemand eine Idee hat, wo man den Bug melden kann; ich bin für jede Hilfe dankbar.</p>
<p>Zur Prävention dieses unnötigen Fehlers hier noch ein Stück Code, wie man ein Schaltjahr korrekt berechnet:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">bool</span> isLeap<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> year<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>year <span style="color: #000040;">%</span> <span style="color: #0000dd;">4</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>year <span style="color: #000040;">%</span> <span style="color: #0000dd;">100</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>year <span style="color: #000040;">%</span> <span style="color: #0000dd;">400</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Es ist C++-Code, sollte aber sehr leicht verständlich und schnell auf andere Programmiersprachen anwendbar sein.</p>
]]></content:encoded>
			<wfw:commentRss>http://johker.ibutho.de/2008/08/17/schaltjahre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
