Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 3
Ir a la página 1, 2, 3  Siguiente
 
Función CDate
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Función CDate 
 
Buenas!.

He convertido una cadena con un formato de fecha mm/dd/yyyy a un tipo date.

Public Sub Main()
  
  Dim fecha1 As Date  
  Dim fechacadena As String
  
  fechacadena = "11/25/1978"
  Print fechacadena
  fecha1 = CDate(fechacadena)
  Print fecha1
 
End
 


El resultado es este:

Citar:

11/25/1978
24/11/1978 22:00:00


Por curiosidad , ¿ cómo es que en el tipo date da casi un día menos ?.
Según la ayuda dice:

Citar:

Las fechas se almacenan como UTC. Se convierten en fecha local sólo al ser representadas.


Por otro lado, de Cdate dice:

Citar:

¡Precaución! Esta función no utiliza los parámetros de locaclización actuales.


Bueno, de principio se lo doy en formato mm/dd/yyyy

¿ Cuando dice representadas que quiere decir exactamente ?.
Si yo la muestro con un print, es una forma de presentarla, ¿ entonces ?.  
Si yo usase Format con el tipo Date me estaría dando un día menos.

Print Format(fecha1, "mm/dd/yyyy")
 


Citar:

11/24/1978


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Domingo, 22 Abril 2018, 18:45; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
Por cierto.

Si buscáis el tipo date en la ayuda de gambas dice esto, que me parece un poco extraño..

Citar:

Este tipo de dato nativo representa un valor de fecha y hora.
Las fechas se almacenan internamente como un par de valores enteros:
El primero es el número de días desde la era gambas, un día arbitrario en el 8000 A.C.
El último es el número de microsegundos desde medianoche.


La era gambas ?. ¿ En el 8000 A.C ya existía "La Gamba" primaria ?!.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
Creo que el primer día de la cuenta es el 1600/01/01, no un día del 8000 AC. Tengo que mirarlo, que ahora me pilla fuera.
En cualquier caso, me sienta fatal este «maremagnum» de convenios de tiempo cuando desde hace mucho se estableció la Fecha Juliana —no Calendario Juliano— y un sistema de representación de tiempo bajo la norma ISO 8601. ¿Tan difícil es unificar bajo esta norma internacional que funciona y bien? Pues debe ser difícil, porque hay un tiempo Unix, un tiempo Excel, un tiempo Mac... Aquí todo el que llega pone el origen donde le sale de las orejas. Y no, YA no es por la limitación de memoria o similar. Es por capricho unívoco, o al menos me lo parece.
Al final, cuando programo cosas de astronomía que requieren de cómputos de tiempo largos me pongo la función de Calendario Gregoriano a Fecha Juliana y viceversa.

Aquí una lista con diversos sistemas de tiempo, con orígenes y resoluciones. —Que, por cierto, otra incongruencia es que haya resoluciones del orden del ms o mucho menos, y que no se tengan en cuenta los segundos intercalares.—:

https://en.wikipedia.org/wiki/System_time

Perdonad, creo que me he encendido y me he ido un poco del tema.
 



 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
Los códigos están sin comentar, pero creo que son suficientemente explicativos para usarse en cuanto a argumentos y resultados:

Public Function Gregoriano_JD(Ano As Short, Mes As Byte, Dia As Byte, Frc As Float) As Float

  Dim AA As Short
  Dim BB As Short
  Dim KK As Float
  
  
  If Mes < 3 Then
    Ano = Ano - 1
    Mes = Mes + 12
  Endif
  
  AA = Int(Ano / 100)
  KK = Ano + Mes / 100 + Dia / 10000
  If KK < 1582.1015 Then
      BB = 0
    Else
      BB = 2 - AA + Int(AA / 4)
  Endif
  
  
  Return Int(365.25 * (Ano + 4716)) + Int(30.6001 * (Mes + 1)) + Dia + BB - 1524.5 + Frc

End

Public Function JD_Gregoriano(JD As Float) As Float[]

  Dim Q As Float
  Dim F As Float
  Dim Z As Integer
  Dim A As Integer
  Dim P As Integer
  Dim B As Integer
  Dim C As Integer
  Dim D As Integer
  Dim E As Integer
  
  Dim Frc As Float
  Dim Dia As Byte
  Dim Mes As Byte
  Dim Ano As Short
  
  Dim Res As New Float[4]
  
  Q = JD + 0.5
  F = Frac(Q)
  Z = Int(Q)
  If Z < 2299161 Then
      A = Z
    Else
      P = Int((Z - 1867216.25) / 36524.25)
      A = Z + 1 + P - Int(P / 4)
  Endif
  
  B = A + 1524
  C = Int((B - 122.1) / 365.25)
  D = Int(C * 365.25)
  E = Int((B - D) / 30.6001)
  
  Dia = B - D - Int(30.6001 * E)
  Frc = F
  
  If E < 14 Then
      Mes = E - 1
    Else
      Mes = E - 13
  Endif
  
  If Mes < 3 Then
      Ano = C - 4715
    Else
      Ano = C - 4716
  Endif

  Res[0] = Ano
  Res[1] = Mes
  Res[2] = Dia
  Res[3] = Frc
  
  Return Res
  
End

 



 
última edición por Grandamakulo el Lunes, 23 Abril 2018, 09:10; editado 1 vez 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
Grandamakulo escribió: [Ver mensaje]
Los códigos están sin comentar, pero creo que son suficientemente explicativos para usarse en cuanto a argumentos y resultados...



Interesante. Yo también realicé algunas funciones de conversión entre fechas Juliana y Gregoriana que utilicé en: https://foro.gambas-es.org/viewtopic.php?f=5&t=6699

Saludos!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
¡Estupendo!, yo estoy pasando un programa de efemérides que tenía para VB.
¡Compartiremos código!
 



 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
Shell escribió: [Ver mensaje]


El resultado es este:

Citar:

11/25/1978
24/11/1978 22:00:00


Por curiosidad , ¿ cómo es que en el tipo date da casi un día menos ?.
Según la ayuda dice:

Citar:

Las fechas se almacenan como UTC. Se convierten en fecha local sólo al ser representadas.




Efectivamente, las fechas se almacenan en tiempo universal coordinado —más o menos—, por lo que al representarlas con la configuración local le quitan las dos horas del horario de verano en península y Baleares. Porque no te está dando un día menos, son, insisto, sólo dos horas: desde las 00:00 de un día hasta las 22:00 del anterior.
Un saludo
 



 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
En principio la cuestión de la fecha o la hora es para controlar el intervalo de tiempo de generación
entre sprites.

Del primer ejemplo del libro "Python Hunting" cuyos autores son: Brian Carling      y Marley Adair.
Python Hunting

He convertido el ejemplo a gambas. Usando las mismas imágenes.
Se controla que cuando llueve, el muñeco usa el paraguas.

 llueveonollueve

Desde la primera gota que toca al personaje se controla el tiempo y el uso de la imagen con paraguas.
Una vez que a nube se aleja de este.

 nollueve

Para la creación de estos ejemplos necesito controlar el tiempo de alguna forma.
PyGame es distinto a la clase Paint.

Esto es cuando se dibuja el personaje.

Public Sub Dibujar()
  
  'Print DateDiff(Me.tiempodeimpacto, Now, gb.Second)
  If DateDiff(Me.tiempodeimpacto, Now, gb.Second) >= 1 Then
    Me.imagen = imagenmike
    Paint.DrawImage(Me.imagen, Me.x, Me.y, Me.imagen.Width, Me.imagen.Height)  
  Else
    Me.imagen = imagenmikeparagua
    Paint.DrawImage(Me.imagen, Me.x, Me.y, Me.imagen.Width, Me.imagen.Height)
  Endif
  
End
 


El control del tiempo en los videojuegos es fundamental en determinados momentos.
Entender estos conceptos a la primera no se fácil. Y sobre todo convertir de un lenguaje
a otro. Al final logré hacerlo funcionar, pero quería probar otras cosas.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
Que ahora que me fijo:

Public Sub Dibujar()
  
  'Print DateDiff(Me.tiempodeimpacto, Now, gb.Second)
  If DateDiff(Me.tiempodeimpacto, Now, gb.Second) >= 1 Then
    Me.imagen = imagenmike  
  Else
    Me.imagen = imagenmikeparagua
  Endif
  Paint.DrawImage(Me.imagen, Me.x, Me.y, Me.imagen.Width, Me.imagen.Height)  
  
End
 


Cuantos detalles.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Función CDate 
 
Grandamakulo escribió: [Ver mensaje]
¡Estupendo!, yo estoy pasando un programa de efemérides que tenía para VB.
¡Compartiremos código!


Excelente, bro!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes ¿Función Parecida Al StrReverse De VB? ociokart General 1 Domingo, 05 Junio 2011, 17:55 Ver último mensaje
jguardon
No hay nuevos mensajes Función Atan2 RIKL Controles/Librerías/Componentes 4 Viernes, 13 Julio 2012, 12:11 Ver último mensaje
RIKL
No hay nuevos mensajes Función Min Shell General 9 Domingo, 10 Abril 2016, 14:52 Ver último mensaje
v3ctor
No hay nuevos mensajes Documentar Función Shell General 21 Domingo, 20 Octobre 2019, 17:55 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 3
Ir a la página 1, 2, 3  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron