(15-06-2023, 22:15)tincho escribió: Probaste poner en la terminal date --help ? Ese comando tiene un montón de opciones de salida.
(15-06-2023, 22:15)tincho escribió: Para mas claridad, pone un ejemplo de lo que querés obtener (literalmente) y de lo que querés proporcionarle a la "función" para que te devuelva eso que buscas.
Public Function Dif_HL_UTC(sZonaHoraria As String, fJD As Float) As Single
'**** Cálculo de la diferencia entre la hora local (HL) y el tiempo universal
' coordinado (UTC) a partir de una zona horaria y un tiempo secuencial, JD.
'<<<< sngDif Diferencia entre hora local y UTC en horas entre -12 y +12. ¡Ojo!,
' que puede ser una fracción.
'>>>> fJD: Día juliano, número de días transcurridos de manera secuencial desde
' el 1 de enero de -4712. Puede valer cualquier otro secuencial, como el
' número de segundos UNIX —tipo de datos DATE—.
'>>>> sZonaHoraria: cadena que indica la zona horaria en formato tzdata, por
' ejemplo: "Europa/Madrid", "America/Buenos_Aires"
Dim sngDif As Single
''Código: Aquí ocurren cosas maravillosas con tzdata.
Return sngDif
End
(15-06-2023, 16:49)Grandamakulo escribió: En: https://en.wikipedia.org/wiki/Tz_database , en el apartado «Use in software systems» hay implementación en varios lenguajes.Aquí utilizando la librería externa GLib, mencionada en el enlace que has citado:
' Gambas module file
Library "libglib-2.0:0.7200.4"
Private Enum G_TIME_TYPE_STANDARD = 0, G_TIME_TYPE_DAYLIGHT, G_TIME_TYPE_UNIVERSAL
' GTimeZone ° g_time_zone_new_identifier(const gchar °identifier)
' Creates a GTimeZone corresponding to identifier.
Private Extern g_time_zone_new_identifier(identifier As String) As Pointer
' gint g_time_zone_find_interval(GTimeZone *tz, GTimeType type, gint64 time_)
' Find an interval within tz that corresponds to given time_.
Private Extern g_time_zone_find_interval(tz As Pointer, type As Integer, time_ As Long) As Integer
' gint32 g_time_zone_get_offset(GTimeZone *tz, gint interval)
' Determines the offset to UTC.
Private Extern g_time_zone_get_offset(tz As Pointer, interval As Integer) As Integer
' void g_time_zone_unref(GTimeZone *tz)
' Decreases the reference count on tz.
Private Extern g_time_zone_unref(tz As Pointer)
Public Sub Main()
Dim timezone As String
Dim gtz As Pointer
Dim itv, off As Integer
timezone = Replace(File.Load("/etc/timezone"), gb.NewLine, "\x00")
gtz = g_time_zone_new_identifier(timezone)
If gtz == 0 Then Error.Raise("Errore !")
itv = g_time_zone_find_interval(gtz, G_TIME_TYPE_STANDARD, DateDiff(CDate("01/01/1970 00:00:00"), Now, gb.Second))
off = g_time_zone_get_offset(gtz, itv)
Print off; " = "; Time(0, 0, 0, off * 1000)
g_time_zone_unref(gtz)
End
(22-06-2023, 13:13)Grandamakulo escribió: en cuanto a System.Timezone, claro, funciona genial, pero sólo para este momento y para este equipo. Yo necesito que, en función de la zona horaria que se proponga, no la del equipoAh, entiendo.
(22-06-2023, 13:13)Grandamakulo escribió: grazie mille per tuttoÈ stato un piacere e molto interessante aiutarti.