Foros del Web » Programación para mayores de 30 ;) » .NET »

Transformar una fecha de tipo LONG

Estas en el tema de Transformar una fecha de tipo LONG en el foro de .NET en Foros del Web. Hola amigos. Tengo una fecha que me la dan en tipo long, y quiero pasarla a tipo date. El tema éstá en que hago lo ...
  #1 (permalink)  
Antiguo 16/10/2009, 09:01
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Pregunta Transformar una fecha de tipo LONG

Hola amigos.
Tengo una fecha que me la dan en tipo long, y quiero pasarla a tipo date.

El tema éstá en que hago lo siguiente. Muy sencillo.

Dim Fecha as new date(longValor)

Eso me hace bien el cambio, y la fecha se asigna corréctamente.... sin embargo el año me queda mal. Es lo único que hace mal, el resto, días, mes, y horas, va todo bien.

Un ejemplo real de transformación que me hace

Del valor long
128990705795184380

Me hace el tipo date : #10/3/0409 7:09:39 PM#

Todo correcto. 10 de Marzo. La hora también es correcta.... Pero el año...puff. La propiedad date.year es 409. Y el cero anterior no se de donde lo saca.


Sabéis cuál es el problema, y lo que es más importante... la solución....


Saludos
  #2 (permalink)  
Antiguo 16/10/2009, 11:48
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Transformar una fecha de tipo LONG

verifica si la Marca de tiempo unix que es la fecha en long, sea en segundos o milisegundos, para ello divídela entre 1000 e intenta a ver si te da resultado, por cierto las marcas unix no pueden representar fechas menores al epoch unix: 1 de enero del 1970, y dependoindo de la capacidad del operador, 4 bytes sólo llegan hasta febrero o marzo del 2038
  #3 (permalink)  
Antiguo 19/10/2009, 08:25
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Transformar una fecha de tipo LONG

No entiendo muy bien tu respuesta, pero si lo entiendo bien, lo que hice fue dividir la fecha en long por 1000 y pasar esa cifra a date. En ese caso la fecha que da es errónea, pues saldría 30/05/0001

No cuadra para nada.

Hay una función que pasaba la fecha long a fecha sin problema, pero es una función viega hecha con visual script y no consigo traducirla a .net. Es ésta:

Código:
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
         lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0 ) Then
        dtmDate = #1/1/1601#
Else
       dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
      + lngLow)/600000000 - lngBias)/1440
End If
Lo que ocurre es que esa variable longbias no se de donde sale.

¿Alguan sugerencias, solución o ayuda????
  #4 (permalink)  
Antiguo 19/10/2009, 08:38
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Transformar una fecha de tipo LONG

LngBias se optiene del siguienet código, pero sigo sin saber ponerlo en práctica en .net

Código:
' Obtain local Time Zone bias from machine registry.

Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
    & "TimeZoneInformation\ActiveTimeBias")

If (UCase(TypeName(lngBiasKey)) = "LONG") Then
    lngBias = lngBiasKey
ElseIf 
    (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
        lngBias = 0
         For k = 0 To UBound(lngBiasKey)
            lngBias = lngBias + (lngBiasKey(k) * 256^k)
         Next
End If
  #5 (permalink)  
Antiguo 20/10/2009, 01:15
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Transformar una fecha de tipo LONG

¿Nadie sabe nada que me pueda ayudar?
  #6 (permalink)  
Antiguo 21/10/2009, 01:11
 
Fecha de Ingreso: junio-2007
Mensajes: 327
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Transformar una fecha de tipo LONG

Bueno, ya he encontrado una posible solución que parece funcionar. Explico lo que he hecho:

1- Creo una variable fecha y la inicializo con "#1/1/1601# " Según el script, debe de ser desde donde se comienza a contar las fechas. Yo no lo sabía.

2- Creo uan variable fecha a partir del long con el "Dim Fecha2 as new datetime(FechaLong)"

3- Sumo las dos fechas y ya lo tengo. ¿Cómo lo hago? Añadiendo a la fecha uno, lo de la fecha dos del siguiente modo:

Cita:
fecha = fecha.AddDays(Fecha2.Day - 1)
fecha = fecha.AddMonths(Fecha2.Month - 1)
fecha = fecha.AddYears(Fecha2.Year - 1)
fecha = fecha.AddHours(Fecha2.Hour)
fecha = fecha.AddMinutes(Fecha2.Minute)
fecha = fecha.AddSeconds(Fecha2.Second)
Y listo. Tengo en la variable fecha la fecha deseada con su año bien puesto. Espero que a alguien le pueda servir algún día.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:21.