2008-09-18 22 views
8

Esto es probablemente demasiado pedir, pero ¿hay algún lenguaje que haga un trabajo excelente al representar las operaciones de fecha y hora? Le concedo de inmediato que es realmente difícil para escribir una biblioteca de tiempo realmente genial. Dicho esto, ¿hay algún idioma extendido que tenga uno? Básicamente, quiero algo que maneje la hora y la fecha tan exhaustivamente como las bibliotecas modernas de expresiones regulares hacen su trabajo. Todo lo que he visto hasta ahora en Python y Java omite una o más piezas bastante importantes, o hace demasiadas cosas difíciles.¿Qué idiomas funcionan realmente bien con las operaciones de fecha, hora y calendario?

Al menos esto debe ser intuitiva que hacer:

  • encuentra el número de días entre dos fechas dadas, el número de minutos entre dos minutos períodos dados, etc.
  • sumar y restar intervalos de marcas de tiempo
  • permite la conversión simple entre zonas horarias, con cambio de horario de verano por región contabilizada automáticamente (dado que hay una base de datos de soporte precisa de configuraciones regionales disponibles)
  • obtenga el período en el que cae una marca de tiempo determinada, determinado periodo de granularidad ("¿Qué día del calendario es la fecha en?")
  • apoyo muy generales conversiones de cadena a la fecha (dado un patrón)

Además, si hay un calendario al estilo de Java configuración/GregorianCalendar , la clase de calendario general debería acomodarse hacia las subclases si necesito lanzar mi propio calendario hebreo, babilónico, tolkien o marciano. (Los Calendarios de Java lo hacen inútilmente difícil, por ejemplo.)

Aquí estoy completamente agnóstico del idioma. Está bien si la cosa se ahoga en el cálculo de cosas ambiguas como "¿cuántos minutos hay entre 2002 y el próximo Día de San Valentín?"

+2

Esto no es una pregunta de idioma tanto como una pregunta de la biblioteca. – Kristoffon

Respuesta

2

Me gusta .NET para esto. Proporciona una buena manipulación de fecha/hora, con las clases DateTime y Timespan. Sin embargo, la mayoría de las cosas de fecha/hora son bastante simples en cualquier idioma, lo que le dará una marca de tiempo Unix para trabajar.

+0

.NET está bien, pero algunos de los detalles son confusos. – EndangeredMassa

+0

¿Qué te pareció confuso? Fue completamente intuitivo para mí. Tal vez publique una pregunta aquí. –

1

Mi favorito personal sería ActiveSupport de Ruby with Rails.

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

Es compatible con todas las características que usted ha mencionado anteriormente, con un DSL similar (lenguaje específico de dominio)

4

¿Usted está buscando algo así como los PHP strtotime? Eso le dará la marca de tiempo de unix de casi cualquier cosa que le pueda arrojar.

Desde el sitio php:

<?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"; 
?> 

clases fecha de .NET requieren mucho más arcano jugando con DateTimeFormatInfo y similares, para analizar las cadenas de fecha que no son casi tan complicado como strtotime puede manejar.

PHP proporciona una clase DateTime y una clase DateTimeZone a partir de PHP 5, pero ambas están bastante mal documentadas. Todavía utilizo principalmente las marcas de tiempo de Unix y las funciones date, time y strtotime ya que no he entendido por completo los nuevos objetos.

Los siguientes enlaces intentan dar cuerpo a DateTime y DateTimeZone un poco mejor:

0

Aparte: Me pregunto qué clase de tipos de datos de fecha se utilizan en ámbitos como ¡arqueología! ¿Cómo representa uno las fechas históricas para un applet de línea de tiempo?

1

Acepto que Java SDK tiene una implementación terrible de la biblioteca de fecha y hora. Es de esperar que JSR-310 solucione este problema en Java 7. Si no puede esperar a Java 7, le recomendaría el precursor de JSR-310, Joda Time.

Acepto que la implementación de Ruby on Rails en ActiveSupport es una implementación excelente que obtiene los principios básicos.

0

Ruby tiene una excelente compatibilidad, en realidad. Consulte this page. Excelente soporte para convertir cadenas en fechas, fechas en cadenas, hacer matemáticas en fechas, analizar cadenas de "lenguaje natural" como "3 meses atrás, este viernes a las 3:45 pm" en una fecha real, convirtiendo fechas en cadenas para que pueda hacer cosas como "Sam inició sesión por última vez hace 4 días" o lo que sea ...

Muy ingenioso.

2

PHP no es tan malo.

// 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() 

Tienes que darle algunas felicitaciones por tener a function to tell what date Easter is in a given year.

3

Hay un lenguaje de programación realmente genial llamado Frink. Es compatible con casi todas las unidades inventadas, todas las constantes físicas y matemáticas, zonas horarias, bla bla bla ...

Incluso tiene un web interface y un Java Applet.

Algunos de los desafíos anteriores:

  • encontrar el número de días entre dos fechas dadas, el número de minutos entre dos minutos períodos dados, etc.
    • Cuántos días hasta la Navidad: # 2008-12-25 # - now[] -> days
    • Cuánto tiempo desde el mediodía: now[] - # 12:00 # -> minutes
  • sumar y restar intervalos de marcas de tiempo
    • Cuando fue mi millones de minutos de cumpleaños: # 1979-01-06 # + 1 million minutes
  • permiten la conversión simple entre zonas horarias, wi º horario de verano cambia según la región cuenta automáticamente (teniendo en cuenta que hay una base de datos precisa el apoyo de la configuración regional disponible)
    • Cuando se inició la Olimpiada de Beijing en Londres: # 2008-08-08 08:08 PM China # -> London
  • ayuda cadena-a muy general -Fecha conversiones (dado un patrón)
    1. definir un nuevo formato de fecha: ### dd.MM.yyyy ###
    2. de análisis: # 18.09.2008 #

Frink se integra muy bien con Java: puede ser embedded in Java applications y programas Frink puedo call Java code.

1

He estado muy contento con la clase PEAR Date para PHP. Hace todo lo que pregunta, creo, con la excepción de varios calendarios, aunque también está Date_Human, que podría ser una plantilla para ese tipo de cosas.

Además, no he trabajado aún, pero Zend_Date, también para PHP, parece que funcionará bien para la mayoría de lo que desea. Zend_Date tiene la ventaja de basarse en las marcas de tiempo de Unix y en el hecho de que la mayor parte de las clases de Zend Framework son fáciles de extender. Por lo tanto, es muy probable que pueda agregar rápidamente soporte para sus otros sistemas de fechas extendiendo Zend_Date.

1

La biblioteca DateTime de Perl es sin duda la mejor biblioteca (como la más correcta) para el manejo de las matemáticas de fecha y hora y las zonas horarias. Todo lo demás está mal en diversos grados. (Y lo digo después de haber escrito el blog ha hecho referencia anteriormente en bibliotecas DateTime/DateTimeZone de PHP) Función

1

PHP Fecha es fantástico y tiene un montón de funciones útiles (enlace: php.net/date)

.NET no es malo en que es últimos lanzamientos y me gusta el hecho de que puede agregar una referencia a un idioma secundario y mezclar y combinar el código en su proyecto. Por lo tanto, podría usar las funciones C# y VB dentro de la misma clase.

Cuestiones relacionadas