Schlagwort-Archive: Uhrzeit

thematrix

Linux ist heutzutage wirklich außerordentlich benutzerfreundlich und intuitiv. Ihr müsst eigentlich nur mal kurz das Terminal aufmachen und diesen einen (gar nicht mal soooo langen) Befehl eintippen, den ihr euch im ganzen Leben nicht merken könnt. Und dann nur noch zwei oder drei weitere Befehle, und dann müsst ihr normalerweise nur noch den Nippel durch die Lasche ziehen und dann im Internet nachschauen wie man diesen einen Fehler behebt, und dann habt ihr es fast geschafft ein ganz normales Programm zu installieren. Kaum der Rede wert, so einfach ist das.

Ich habe mir mal zum Herumspielen Linux Mint 18 in einer VM installiert, also die womöglich beliebteste Linux-Distribution der letzten Jahre. Das hat sogar fast problemlos geklappt. So ist Linux im Jahr 2016: Es klappt immer fast problemlos. Man muss eigentlich nur in vier oder fünf Linux-Foren vorbeischauen, und jemanden finden, der irgendwann mal dieselben Probleme und dieselben Fehlermeldungen hatte wie man selbst, dann geht das schon irgendwie. So hat sich Linux gleich nach der Installation komplett aufgehängt, und ich habe mit zusammengebissenen Zähnen und viel bescheuertem Herumsuchen den Soundtreiber dazu bekommen, mal endlich Ton unter Linux abzuspielen. Ton unter Linux – wie das klingt, der reine Wahnsinn! Am Ende laufen vielleicht sogar noch Spiele unter Linux – sogar mit Grafik! Ihr werdet es bestimmt noch erleben!

So untersuchte ich staunend die tolle Benutzeroberfläche meines brandneuen Betriebssystems und wollte mir mal ein paar Programme installieren, um damit zu arbeiten. Als erstes fiel mir ein, dass ich gerne eine Linux-Alternative zum grandiosen Notepad++ hätte. Einen brauchbaren Linux-Klon gibt es wohl unter dem Namen „Notepadqq“. Den werde ich mir mal eben kurz installieren, so dachte ich jedenfalls. Also schnell die wundervolle Linux-Anwendungsverwaltung aufgemacht und „Notepadqq“ eingetippt. Und ich sah, dass ich nichts sah. Sehr nützlich diese Anwendungsverwaltung. Auf die Verlässlichkeit von Linux ist offenbar Verlass. Kein Problem, der Firefox ist ja praktischerweise vorinstalliert: Ich lade mir Notepadqq einfach von der Webseite runter. Dort steht unter „Install Notepadqq in Ubuntu 14.04 and Linux Mint 17„:

For Ubuntu and Ubuntu based Linux distributions such as Linux Mint, Elementary OS, PinguyOS there is a PPA available from the developers. Open the terminal and use the following commands:

sudo add-apt-repository ppa:notepadqq-team/notepadqq
sudo apt-get update
sudo apt-get install notepadqq

Hey, ich hatte wirklich schon die Befürchtung, ich müsste mir erst umständlich per Mausklick irgendeinen Installer herunterladen und dann darauf auch noch doppelklicken. Aber Linux zeigt konsequent wie es richtig geht. Und das ist noch gar nicht alles! Um das Tool wieder zu deinstallieren muss ich nicht erst umständlich in der Softwareverwaltung bei Notepadqq auf „Deinstallieren“ klicken – NEIN! Ich muss einfach nur folgende zwei Zaubersprüche in die Konsole hämmern und schon gehts los:

sudo apt-get remove notepadqq
sudo add-apt-repository –remove ppa:notepadqq-team/notepadqq

Das kann sogar meine Oma. Am besten schreibt man sich diese Befehle irgendwo ins Notizbuch oder klebt sich Post-Its an den Monitor. So geht das unter Linux. Da kann sich jeder wie der größte Hacker fühlen. Ich frage mich gerade, wie man unter Linux die Uhr umstellt. Wahrscheinlich irgendwie so:

sudo set-os-clock-configuration –time+date format:YYYY-MM-DD_HH:mm:SS/2016-09-17_11:18:22 -persist update
sudo clock-configuration change confirm -silent kthxbye
sudo sudo sudo kamehameha

Linux…

Willkommen zu meinem nächsten Beitrag direkt aus meinem Fundus merkwürdiger Java-Lösungen für nicht ganz so alltägliche Programmierprobleme. Normalerweise würde ich meine kreativen Fehltritte sicher NIE veröffentlichen, aber dieses Mal mache ich noch eine Ausnahme, da ich glaube, es könnte den einen oder anderen auf die richtige Spur bringen, wenn er nicht weiter weiß.

Kürzlich war ich dabei, einen kleinen Indexer für dies und das zu schreiben, der einmal am Tag zu einer bestimmten Tageszeit Datensätze aus einer Datenbank zieht. Wofür genau spielt hier natürlich keine Rolle. Jedenfalls wollte ich dafür einen TimerTask verwenden, und der wird beispielsweise mit einem Delay (Verzögerung in Millisekunden bis zum ersten Start), und einem Intervall (Verzögerung in Millisekunden für alle darauffolgenden Starts) gefüttert. Randbedingung war, dass der Indexer einmal am Tag um dieselbe Uhrzeit läuft. Diese Uhrzeit soll man hinterlegen können. Den TimerTask-Kram habe ich weggelassen, und den eigentlichen Indexer-Code auch, um das Beispiel möglichst auf das Essentielle zu reduzieren.

Mein Problem war nämlich, dass ich auf Anhieb nicht wusste, wie ich herausfinden könnte, wann der nächstmögliche Zeitpunkt für eine festgelegte Uhrzeit ist, also ob beispielsweise 14:30 Uhr noch am selben Tag ist, oder erst am darauffolgenden Tag. Wieviele Millisekunden muss ich als Verzögerung des initialen Starts angeben, damit der Indexer zur nächsten Gelegenheit um eine bestimmte Uhrzeit losläuft?

Nach einer Weile habe ich mir die obige Lösung für mein simples Problem auserdacht. Die Methode timeToNextIndexTask() gibt einen int-Array zurück, der die Zeit in Stunden und Minuten beinhaltet. Das lässt sich ohne Schwierigkeiten in Millisekunden umrechnen.

Aber wie das so ist, fällt einem schon kurze Zeit später auf, wie sinnlos man sich den Kopf darüber zerbrochen hat, und dass diese Lösung zwar funktioniert, aber eigentlich viel zu aufwändig und der Code ziemlich wackelig ist. Meine Frage lässt sich mit zwei GregorianCalendar-Objekten sehr einfach beantworten:

Kurzgesagt, man legt einen GregorianCalender für den aktuellen Zeitpunkt an, und verstellt einfach die Uhrzeit, behält das Datum jedoch bei. Nun muss man lediglich mit Hilfe der Methode after() bzw. before() vergleichen, ob das verstellte Calendar-Objekt in der Vergangenheit oder in der Zukunft liegt. Falls es in der Vergangenheit liegt, muss man einen Tag dazuzählen, und schon hat man seinen gewünschten Zeitpunkt.