2008-09-18 7 views
8

Das ist wahrscheinlich zu viel verlangt, aber gibt es irgendeine Sprache, die wirklich eine großartige Arbeit bei der Darstellung von Zeit- und Datumsoperationen leistet? Ich werde sofort gewähren, dass es wirklich hart ist, um eine wirklich großartige Zeitbibliothek zu schreiben. Das heißt, gibt es irgendwelche weit verbreiteten Sprachen, die eine haben? Im Grunde möchte ich etwas, das Zeit und Datum so umfassend behandelt wie moderne reguläre Ausdrucksbibliotheken ihre Aufgaben erledigen. Alles, was ich bisher in Python und Java gesehen habe, lässt ein oder mehrere ziemlich wichtige Stücke aus oder macht zu viele Dinge schwierig.In welchen Sprachen sind Datum, Uhrzeit und Kalender sehr gut?

Zumindest sollte dies intuitiv zu tun:

  • die Anzahl der Tage zwischen zwei angegebenen Daten, die Anzahl der Minuten zwischen zwei gegebenen Minuten-Perioden finden usw.
  • addieren und subtrahieren Intervalle von Zeitstempel
  • ermöglichen einfache Konvertierung zwischen Zeitzonen, mit Sommerzeit Änderungen nach Region automatisch berücksichtigt (vorausgesetzt, es gibt eine genaue unterstützende Datenbank der regionalen Einstellungen verfügbar)
  • erhalten Sie den Zeitraum, dass ein bestimmter Zeitstempel fällt, bestimmter Zeitraum Granularität ("Was Kalendertag ist dieses Datum in?")
  • Unterstützung sehr allgemeiner String-to-date-Conversions (bei einem Muster)

Ferner, wenn es ein Java-Stil Kalender/GregorianCalendar Setup Die allgemeine Kalenderklasse sollte Unterklassen entgegenkommen, wenn ich meinen eigenen hebräischen, babylonischen, Tolkien- oder Marsianerkalender rollen muss. (Java-Kalender machen dies zum Beispiel sinnlos hart.)

Ich bin völlig sprachunabhängig hier. Es ist in Ordnung, wenn das Ding bei der Berechnung mehrdeutiger Dinge wie "Wie viele Minuten gibt es zwischen 2002 und dem nächsten Valentinstag?"

+2

Dies ist keine Sprachfrage so viel wie eine Bibliothek Frage. – Kristoffon

Antwort

2

Ich mag .NET dafür. Es bietet eine gute Date/Time-Manipulation mit den Klassen DateTime und Timespan. Das meiste Datum/Zeit-Zeug ist jedoch in jeder Sprache ziemlich einfach, was Ihnen einen Unix-Zeitstempel gibt, mit dem Sie arbeiten können.

+0

.NET ist in Ordnung, aber einige der Details sind verwirrend. – EndangeredMassa

+0

Was fanden Sie verwirrend? Es war völlig intuitiv für mich. Vielleicht posten Sie hier eine Frage. –

7

Wie wäre es mit .NET's DateTime? (Sie können Ihre Sprache innerhalb des Frameworks auswählen)

1

Mein persönlicher Favorit wäre Ruby mit ActiveSupport von Rails.

start_time = 5.months_ago.at_end_of_week 
end_time = 6.months.since(start_time) 

Es unterstützt alle Funktionen, die Sie oben mit einem ähnlichen DSL erwähnt haben (domänenspezifische Sprache)

4

Sie wie PHPs strtotime etwas zu suchen sind? Das gibt Ihnen den Unix-Zeitstempel von fast allem, was Sie darauf werfen können.

Von der PHP-Website:

<?php 
echo strtotime("now"), "\n"; 
echo strtotime("10 September 2000"), "\n"; 
echo strtotime("+1 day"), "\n"; 
echo strtotime("+1 week"), "\n"; 
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n"; 
echo strtotime("next Thursday"), "\n"; 
echo strtotime("last Monday"), "\n"; 
?> 

Klassen .NET Datum erfordern viel mehr obskure mit DateTimeFormatInfo und dergleichen Hantieren Datumsstrings zu analysieren, die nicht annähernd so kompliziert sind wie strtotime umgehen kann.

PHP bietet eine DateTime-Klasse und eine DateTimeZone-Klasse wie PHP 5, aber sie sind beide ziemlich schlecht dokumentiert. Ich benutze immer noch meistens Unix-Zeitstempel und die Funktionen date, time und strtotime, da ich mich mit den neuen Objekten noch nicht richtig auseinandergesetzt habe.

die folgenden Verbindungen versuchen Datetime zu konkretisieren und DateTimeZone ein bisschen besser:

0

Abgesehen: Ich frage mich, welche Art von Datumsdatentypen in Bereichen wie verwendet werden, Archäologie! Wie stellt man historische Daten für ein Zeitlinien-Applet dar?

1

Ich stimme zu, dass Java SDK eine schreckliche Implementierung der Datetime-Bibliothek hat. Hoffentlich wird JSR-310 dieses Problem in Java 7 beheben. Wenn Sie nicht auf Java 7 warten können, würde ich den Vorgänger JSR-310, Joda Time, empfehlen.

Ich stimme zu, dass die Implementierung von Ruby on Rails in ActiveSupport eine ausgezeichnete Implementierung ist, die die Grundlagen richtig macht.

0

Ruby hat eine ausgezeichnete Unterstützung, eigentlich. Schauen Sie sich this page an. Wirklich großartige Unterstützung, um Strings in Dates zu verwandeln, in Strings zu mixen, Mathe auf Dates zu schreiben, "natürliche Sprache" Strings wie "vor 3 Monaten diesen Freitag um 15:45" in ein aktuelles Datum zu zerlegen, Daten in Strings zu verwandeln, so dass man Sachen machen kann wie "Sam zuletzt eingeloggt seit 4 Tagen" oder was auch immer ...

Sehr raffiniert.

2

PHP ist nicht halb so schlimm.

// given two timestamps: $t1, and $t2: 

// find the number of days between two given dates, number of minutes 
// between two given minute periods, etc. 
$daysBetween = floor(($t2 - $t1)/86400); // 86400 = 1 day in seconds 
$hoursBetween = floor(($t2 - $t1)/3600); // 3600 = 1 hour in seconds 

// add and subtract intervals from timestamps 
$newDate = $t1 + $interval; 

// allow simple conversion between timezones, with Daylight Saving Time 
// changes by region automatically accounted for (given that there's an 
// accurate supporting database of regional settings available) 

// See PHP's Calendar functions for that 
// http://au2.php.net/manual/en/book.calendar.php 
// It not only supports basic stuff like timezones and DST, but also 
// different types of calendar: French, Julian, Gregorian and Jewish. 

// get the period that a given timestamp falls into, given period 
// granularity ("what calendar day is this date in?") 
if (date("d", $t1) == 5) // check if the timestamp is the 5th of the month 
if (date("h", $t1) == 16) // is it 4:00pm-4:59pm ? 

// support very general string-to-date conversions (given a pattern) 

// strtotime() is magic for this. you can just type in regular english 
// and it figures it out. If your dates are stored in a particular format 
// and you want to convert them, you can use strptime() 

Du musst es einige dickes Lob geben a function to tell what date Easter is in a given year zu haben.

3

Es gibt eine wirklich coole Programmiersprache namens Frink. Es unterstützt so ziemlich jede Einheit, die jemals erfunden wurde, jede physikalische oder mathematische Konstante, Zeitzonen, bla bla bla ...

Es hat sogar eine web interface und eine Java Applet.

Einige Ihrer Herausforderungen oben:

  • die Anzahl der Tage zwischen zwei angegebenen Daten, die Anzahl der Minuten zwischen zwei gegebenen Minuten-Perioden finden usw.
    • Wie viele Tage bis Weihnachten: # 2008-12-25 # - now[] -> days
    • Wie lange seit Mittag: now[] - # 12:00 # -> minutes
  • addieren und subtrahieren Intervalle von Zeitstempel
    • Als meine Millionen Minuten Geburtstag war: # 1979-01-06 # + 1 million minutes
  • ermöglichen einfache Konvertierung zwischen Zeitzonen, wi th Sommerzeit ändert sich von Region automatisch berücksichtigt (gegeben, dass es eine genaue Unterstützung Datenbank der regionalen Einstellungen verfügbar)
    • Wann haben die Olympischen Spiele in Peking starten in London: # 2008-08-08 08:08 PM China # -> London
  • Unterstützung sehr allgemeine String-to -date Conversions (bei einem Muster)
    1. definieren Sie ein neues Datumsformat: ### dd.MM.yyyy ###
    2. Parse: # 18.09.2008 #

Frink integriert gut mit Java: es embedded in Java applications und Programme können call Java code Frink sein kann.

1

Ich war ziemlich glücklich mit der PEAR Date Klasse für PHP. Es tut alles, was Sie fragen, glaube ich, mit Ausnahme von mehreren Kalendern, obwohl es auch Date_Human gibt, was eine Vorlage für diese Art von Sache sein könnte.

Auch habe ich noch nicht damit gearbeitet, aber Zend_Date, auch für PHP, sieht aus wie es gut für die meisten was Sie wollen. Zend_Date hat den Vorteil, dass es auf Unix-Zeitstempeln basiert und dass der Großteil der Zend Framework-Klassen einfach zu erweitern ist. Daher könntest du sehr schnell Unterstützung für deine anderen Datensysteme hinzufügen, indem du Zend_Date erweiterst.

1

Die DateTime-Bibliothek von Perl ist ohne Zweifel die beste (wie in den meisten Fällen korrekte) Bibliothek für die Behandlung von Datums- und Uhrzeit-Berechnungen und Zeitzonen. Alles andere ist in unterschiedlichem Maße falsch. (Und das sage ich das referenzierte Blog-Beitrag oben geschrieben zu haben auf PHP Datetime/DateTimeZone Bibliotheken)

1

PHP Datum Funktion ist fantastisch und hat viele hilfreiche Funktionen (Link: php.net/date)

.NET ist nicht schlecht drin ist die neuesten Versionen plus ich mag die Tatsache, dass Sie einen Verweis auf eine sekundäre Sprache hinzufügen und den Code in Ihrem Projekt mischen und zuordnen können. So könnten Sie C# - und VB-Funktionen innerhalb derselben Klasse verwenden.