|
Página 1 de 2
|
Tiempo Unix Y Problema Del Año 2038
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Tiempo Unix Y Problema Del Año 2038
Buenas!.
Creo que es interesante:
Citar:
Tiempo Unix o Tiempo POSIX es un sistema para la descripción de instantes de tiempo: se define como la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970, sin contar segundos intercalares.
Tiempo Unix
Hice una pequeña función para conocer los segundos desde esa fecha.
Pero no me devuelve decimales como ocurre en Python con la función:
Imaginar que quisierais saber los milisegundos desde la fecha del tiempo Unix!!!. A ver si podéis lograrlo.
Con el tipo Float me da desbordamiento y con Long igual.
Problema del año 2038
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Martes, 03 Abril 2018, 23:48; editado 1 vez
|
#1 Martes, 03 Abril 2018, 23:47 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Tiempo Unix Y Problema Del Año 2038
Pero no me devuelve decimales...
Imaginar que quisierais saber los milisegundos desde la fecha del tiempo Unix!!!. A ver si podéis lograrlo.
Al usar " gb.Millisecond " me da error: " Overflow " !
última edición por vuott el Viernes, 06 Abril 2018, 10:17; editado 1 vez
|
#2 Miercoles, 04 Abril 2018, 01:15 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Tiempo Unix Y Problema Del Año 2038
Uhmmm......y esta solución ?
|
#3 Miercoles, 04 Abril 2018, 02:06 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Tiempo Unix Y Problema Del Año 2038
Vuott:
Citar:
Uhmmm......y esta solución ?
Es algo extraña la unión al principio, pero funciona correctamente.
Solo devuelve un máximo de tres decimales.
¿ Algún motivo por el cual usaste ".uu" y no solo ".u" ?. Parece que no se pueden añadir más de tres milisegundos.
Citar:
u Print a point and the milliseconds, if they are different from zero.
uu Print a point and the milliseconds with three digits.
Salida:
Citar:
1522843142
1522843142.937
Cuando la función devuelve cadena, usa el punto. Si devolviese un tipo Float, usa la coma.
Supongo que depende del país. Lógicamente me interesa tipo número, no una cadena.
Jo, jo, jo.
En C:
https://www.epochconverter.com/programming/c
A ver cuantos decimales dará.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Miercoles, 04 Abril 2018, 09:19; editado 2 veces
|
#4 Miercoles, 04 Abril 2018, 09:14 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Tiempo Unix Y Problema Del Año 2038
Ahora los chicos malos gracias a que has añadido milisegundos a la función se controlan mejor!.
Public Sub Timer1_Timer()
Dim nuevoalien As Alien
If SegundosDesdeEpoch() - AnteriorTiempoEnAparecer > 0.5 Then
nuevoalien = New Alien(IMAGEN_TIO_MALO, Pantalla)
tiosmalos.Add(nuevoalien)
AnteriorTiempoEnAparecer = SegundosDesdeEpoch()
Endif
Pantalla.Refresh
End
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#5 Miercoles, 04 Abril 2018, 09:33 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Tiempo Unix Y Problema Del Año 2038
Nuestro amigo Gianluigi, del foro italiano de gambas, sugiere que usas el metodo " .ToUnixTime( ) " de la Clase Date, pero activando el Componente gb.util de Gambas.
|
#6 Miercoles, 04 Abril 2018, 10:02 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Tiempo Unix Y Problema Del Año 2038
Pero no me devuelve decimales como ocurre en Python con la función:
Puedes usar:
|
#7 Miercoles, 04 Abril 2018, 10:14 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Tiempo Unix Y Problema Del Año 2038
.... MICROsegundos:
http://www.gambas-it.org/wiki/index...del_API_di_GLIB
...o si prefieres un codigo más breve:
última edición por vuott el Miercoles, 04 Abril 2018, 16:32; editado 4 veces
|
#8 Miercoles, 04 Abril 2018, 10:18 |
|
|
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Re: Tiempo Unix Y Problema Del Año 2038
Segun Wiki el problema del año 2038 se soluciona pasando todo a 64bits
"La mayoría de sistemas operativos para arquitecturas de 64 bits utilizan enteros de 64 bits para time_t. La migración a estos sistemas está todavía en proceso y se espera que se complete mucho antes de 2038. Usar un entero de 64 bits retrasaría la fecha del problema unos 2,90 billones de años (2,9 × 1012). Es decir, 220 veces la edad aproximada del Universo."
|
#9 Miercoles, 04 Abril 2018, 12:10 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Tiempo Unix Y Problema Del Año 2038
Claro que tú prefieres los... NANOsegundos:
...o tambien:
Library "libc:6"
Public Struct timespec
tv_sec As Long
tv_nsec As Long
End Struct
Public Struct tm
tm_sec As Integer
tm_min As Integer
tm_hour As Integer
tm_mday As Integer
tm_mon As Integer
tm_year As Integer
tm_yday As Integer
tm_isdst As Integer
tm_gmtoff As Long
tm_zone As Pointer
End Struct
Private Const CLOCK_REALTIME As Integer = 0
' int clock_gettime (clockid_t __clock_id, struct timespec *__tp)
' Get current value of clock CLOCK_ID and store it in TP.
Private Extern clock_gettime(__clock_id As Integer, __tp As Timespec) As Integer
' size_t strftime (char *__restrict __s, size_t __maxsize, const char *__restrict __format, const struct tm *__restrict __tp)
' Format TP into S according to FORMAT.
Private Extern strftime(__s As Pointer, __maxsize As Long, __format As String, __tp As Tm) As Long
' struct tm *localtime (const time_t *__timer)
' Return the `struct tm' representation of *TIMER in the local timezone.
Private Extern localtime(__timer As Pointer) As Tm
Public Sub Main()
Dim ts As New Timespec
Dim buff As New Byte[24]
Dim tsec As Long
clock_gettime(CLOCK_REALTIME, ts)
tsec = ts.tv_sec
strftime(buff.Data, CLong(buff.Count), "%D %T", localtime(VarPtr(tsec)))
Print String@(buff.Data); ".\e[31m"; ts.tv_nsec; "\e[0m"
End
última edición por vuott el Miercoles, 04 Abril 2018, 16:32; editado 2 veces
|
#10 Miercoles, 04 Abril 2018, 12:26 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|