2017-01-31 4 views
1

Wie Sie die Frage oben sehen können, habe ich mich gefragt, ob IDL Tage/Monate/Jahre zu einem bestimmten Datum hinzufügen oder subtrahieren kann.Kann IDL Datum hinzufügen/subtrahieren?

Zum Beispiel:

given_date = anytim('01-jan-2000') 
print, given_date 

1-Jan-2000 00: 00: 00,000

Wenn ich 2 Wochen auf den given_date hinzufügen würde, dann sollte dieses Datum erscheinen:

15-Jan-2000 0 0: 00: 00.000

Ich suchte bereits nach einer Lösung für dieses Problem, aber leider konnte ich keine Lösung finden.

Hinweis: Ich verwende ein normales Kalenderdatum, nicht das Julianische Datum.

+0

Warum nicht einfach zu/von Julian konvertieren, so dass Sie Tage zuverlässig addieren/subtrahieren können? Schauen Sie sich JULDAY und CALDAT an. –

Antwort

2

Sind Sie nur mit Daten nach 1582 betroffen? Ist die Genauigkeit der Sekunde wichtig?

Die Routine ANYTIM ist nicht Teil der IDL-Verteilung. Möglicherweise gibt es Routinen von Drittanbietern, die Zeitinkremente verarbeiten können, aber ich weiß nicht, dass sie in die IDL-Bibliothek integriert sind.

Standardmäßig gibt ANYTIM die Sekunden vom 1. Januar 1979 zurück. Um also einige Tage, Wochen oder Jahre hinzuzufügen oder zu subtrahieren, können Sie die Anzahl der Sekunden im Zeitintervall berechnen. Natürlich berücksichtigt dies nicht Schaltsekunden/Jahre (aber Schaltjahre sind ziemlich einfach zu berücksichtigen, Schaltsekunden erfordern eine Datenbank, wann sie hinzugefügt wurden). Und das Hinzufügen von Monaten erfordert die Bestimmung des Monats, um die Anzahl der Tage zu bestimmen.

1

IDL kann mithilfe von JULDAY und CALDAT zu und von Julianischen Daten konvertieren.

Sie können auch lesen und schreiben Julian Daten (das Doppelte oder lange ganze Zahlen sind) zu und von Strings mit dem format Schlüsselwort PRINT, STRING und READS.

Sie möchten die (C()) calendar date format code verwenden.

format='(c(cdi0,"-",cMoa,"-"cyi04," ",cHi02,":",cmi02,":",csf06.3))' 

date = julday(1, 1, 2000) 
print, date, format=format 
; 1-Jan-2000 00:00:00.000 

date = date + 14 
print, date, format=format 
; 15-Jan-2000 00:00:00.000 
+0

Danke für Ihre Antwort. Ihre Lösung sieht ziemlich gut aus, aber es passiert eine seltsame Sache, wenn das Datum ausgedruckt wird. Das Ergebnis für mich ist nicht "1-Jan-2000 00: 00: 00.000", aber es druckt dies: '1-Jan-2000 12:00: 0,000'. Also habe ich versucht auch die Zeit auf 0 zu setzen und dies druckt: '1-Jan-2000 00:00: 0,000'. Hat das etwas mit dem Format oder etwas mit ** July ** zu tun? – TheHeroOfTime

+1

Whoops! Ich habe 'csf6.3' verwendet, wenn ich' csf06.3' hätte verwenden sollen. –

+1

Ja, aus der 'JULDAY'-Dokumentation:" Die JULDAY-Funktion berechnet das Julianische Datum (das um 12 Uhr mittags beginnt) für das angegebene Datum. " – mgalloy

Verwandte Themen