![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Cita:
En algunos casos (no en todos) no cogemos la hora del equipo, sino la del servidor (para el tema de Ley antifraude lo hemos usado en varios sitios).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#2
|
|||
|
|||
Cita:
Nosotros también usamos la fecha y hora del servidor SQL server, y procuramos que ese servidor siempre esté en la hora exacta. No usamos la hora local del ordenador porque pueden estar fuera de hora y tampoco consultamos la hora de internet (ROA) a cada factura para evitar tantas consultas. Pero independientemente de esto, nos ocurre lo mencionado en el primer post. Porque esa fecha hora del servidor SQL, al pasarla a DateTime, no tiene el huso y luego depende de donde se utilice ese DateTime, genera una FechaHoraHusoGenRegistro distinta. Para coger la hora del servidor SQL primero usábamos la consulta Pero solo devuelve un DateTime (sin huso) Luego probamos con la consulta Que devuelve un DateTimeOffset, este tipo si que tiene una propiedad Offset con el desplazamiento de la hora respecto de la hora universal coordinada (UTC). Esto seria fantástico si en la clase de VeriFactu que se genera al importar el WSDL, el objeto FechaHoraHusoGenRegistro fuera DateTimeOffset, pero no lo es. Y estamos con el mismo problema Muchas gracias |
#3
|
|||
|
|||
Cita:
¿y no puedes crear una función en el Visual que te devuelva un string, con el formato que necesita Verifactu? si haciendo el "SYSDATETIMEOFFSET" obtienes algo como esto: "2025-04-16 16:44:01.6718891 +02:00" y Verifactu necesita algo como esto: "2025-04-16T16:44:01+02:00" entiendo que no sería difícil crear una función que haga la consulta, la ponga en el formato de Verifactu y la devuelva como string. Y si la haces y la pones aquí, ya la aprovecho yo ![]() ![]() |
#4
|
|||
|
|||
Venga... ya la hice yo, la pongo aquí que mañana es festivo y estoy de buenas
![]() Código:
Function ObtenerFechaHora() As String Dim retorno As String = "" '------------------------------------------- '1 - COGEMOS LA HORA DE INTERNET '------------------------------------------- Try ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType) 'TLS 1.2 Dim webRequest As HttpWebRequest = CType(Net.WebRequest.Create("https://www2.roa.es/cgi-bin/horautc"), HttpWebRequest) webRequest.Method = "GET" Dim respuesta As HttpWebResponse = CType(webRequest.GetResponse(), HttpWebResponse) If respuesta.StatusCode = HttpStatusCode.OK Then Dim strmRespuesta As Stream = respuesta.GetResponseStream() Dim leeRespuesta As New StreamReader(strmRespuesta) Dim jsonRespuesta As String = leeRespuesta.ReadToEnd() Dim ticks As Long = Long.Parse(jsonRespuesta.Replace("\n", "")) Dim fechora As DateTime = Org.BouncyCastle.Utilities.Date.DateTimeUtilities.UnixMsToDateTime(ticks).ToLocalTime() retorno = fechora.ToString("yyyy-MM-dd'T'HH:mm:ssK") End If Catch Ex As Exception 'MsgBox(Ex.Message, MsgBoxStyle.OkOnly, "ObtenerFechaHora - Internet") End Try '------------------------------------------- '2 - COGEMOS LA HORA DEL SERVIDOR SQL '------------------------------------------- If retorno = "" Then Try Dim DAHora As New SqlDataAdapter Dim DSHora As New DataSet Dim SqlHora As String = "SELECT SYSDATETIMEOFFSET() AS FechaActual" DSHora.Reset() DAHora = New SqlDataAdapter(SqlHora, Conexion) DAHora.Fill(DSHora, "Hora") If DSHora.Tables("Hora").Rows.Count = 1 Then Dim RowHora As DataRow = DSHora.Tables("Hora").Rows(0) Dim fechora As DateTime = RowHora.Item("FechaActual").ToString retorno = fechora.ToString("yyyy-MM-dd'T'HH:mm:ssK") End If DAHora.Dispose() DSHora.Dispose() Catch Ex As Exception 'MsgBox(Ex.Message, MsgBoxStyle.OkOnly, "ObtenerFechaHora - Servidor") End Try End If '------------------------------------------- '2 - COGEMOS LA HORA DEL EQUIPO '------------------------------------------- If retorno = "" Then retorno = DateTime.Now.ToString("yyyy-MM-dd'T'HH:mm:ssK") End If Return retorno End Function Primero intenta cogerla de internet, si no es capaz del servidor sql y si no es capaz del equipo La primera puede dar error si no hay internet o no responde ROA... la segunda debería devolver siempre (si no hay conexión al servidor ya no va a funcionar la aplicación) Espero que te sirva! |
#5
|
|||
|
|||
Cita:
Si utilizo un string para almacenar la FechaHoraHusoGenRegistro al generar el registro, ya se guarda correctamente PERO, con las clases que se genera en Visual Studio al importar el WSDL, el campo no es string sino DateTime. Para utilizar ese string tendría que hacer una de las opciones 2 o 3 que comento en el primer post y que intento evitar ![]() Muchas gracias igualmente |
#6
|
|||
|
|||
Cita:
pues a mi usando el objeto me deja asignarle un campo string: Código:
CType(objectoFactEmitida.RegistroFactura(x).Item, RegistroFacturacionAltaType).FechaHoraHusoGenRegistro = Row.Item("FechaHoraHusoGenRegistro") CType(objectoFactEmitida.RegistroFactura(x).Item, RegistroFacturacionAltaType).TipoHuella = TipoHuellaType.Item01 CType(objectoFactEmitida.RegistroFactura(x).Item, RegistroFacturacionAltaType).Huella = Row.Item("HuellaVerifactu") |
#7
|
|||
|
|||
Cita:
En nuestro caso es DateTime y no puedo hacer esa asignación directa sin convertir. Al importar el WSDL dentro del fichero reference.cs genera el campo así: Código:
/// <remarks/> [System.Xml.Serialization.XmlElementAttribute(Order=25)] public System.DateTime FechaHoraHusoGenRegistro { get { return this.fechaHoraHusoGenRegistroField; } set { this.fechaHoraHusoGenRegistroField = value; this.RaisePropertyChanged("FechaHoraHusoGenRegistro"); } } Código:
<element name="FechaHoraHusoGenRegistro" type="dateTime" /> Gracias igualmente Última edición por rci fecha: Hace 2 Semanas a las 17:58:53. |
#8
|
|||
|
|||
a mi también me dice que es de tipo Date. Entiendo que a todo el mundo debería decirle lo mismo, porque estamos importando el mismo wsdl:
Código:
'''<remarks/> Public Property FechaHoraHusoGenRegistro() As Date Get Return Me.fechaHoraHusoGenRegistroField End Get Set Me.fechaHoraHusoGenRegistroField = value End Set End Property pero me traga cuando lo que le envío es un string: Código:
CType(objectoFactEmitida.RegistroFactura(x).Item, RegistroFacturacionAnulacionType).FechaHoraHusoGenRegistro = Row.Item("FechaHoraHusoGenRegistro") |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Consultas por franja horaria | petercat | SQL | 2 | 17-04-2018 09:12:29 |
Obtener zona horaria en window 8 | ingabraham | Varios | 0 | 28-08-2013 17:53:04 |
como caambiar la zona horaria desde delphi | kurono | Varios | 4 | 19-08-2008 06:53:36 |
Zona Horaria | palets | API de Windows | 2 | 23-10-2006 19:44:57 |
Zona horaria | Genner | Varios | 1 | 17-04-2006 14:22:20 |
![]() |
|