Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    Convertire data giuliana

    codice:
            Public Shared Function JulianToDateTime(ByVal julianDate As Integer) As DateTime
                Dim RealJulian As Integer = julianDate + 1900000
                Dim Year As Integer = Convert.ToInt32(RealJulian.ToString().Substring(0, 4))
                Dim DoY As Integer = Convert.ToInt32(RealJulian.ToString().Substring(4))
                Dim dtOut As New DateTime(Year, 1, 1)
                Return dtOut.AddDays(DoY - 1)
            End Function
    Dovrebbe convertire una data Jiulian in Date.

    Ma da un input 2452355 (int) mi restituisce 12/20/4352 :master:

    Qualcuno è in possesso di un altro algoritmo ? Oppure...dove sbaglio ?

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Pietro

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    si, purtroppo dà lo stesso problema

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da djciko
    si, purtroppo dà lo stesso problema

    a me dà questo risultato
    2452355 --> 21 marzo 2002, ore 12:0:0



    ps. ho usato il codice proposto: l'unica modifica è stato sostituire

    CInt((ore ) Mod 24)

    con

    CInt((ore + 12) Mod 24)
    Pietro

  5. #5

  6. #6

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    pietro, scusami, il codice che ti funzionava qual'e' ?
    Nel link che ho ricordato c'è il codice. Io me lo sono tradotto (come ho potuto ) in basic. Se vuoi lo mando.
    Pietro

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Mi faresti un favore. Siamo sotto consegna (applicativi su frodi a poste italiane, web services certificati ed un macello che non hai idea) e non ho neanche il tempo di fare il traduttore.

    Chiedimi qualcosa in cambio

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="data_giuliana.aspx.vb" Inherits="CorsoApogeo_date_data_giuliana" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <style type="text/css">
            .data {width:50px; text-align:center}
            .data_giuliana {width:150px; text-align:center}
            .pulsante {border:none; background-color:Transparent;}
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <table>
                <tr>
                    <th>Anno</th>
                    <th>Mese</th>
                    <th>Giorno</th>
                    <th>Ora</th>
                    <th>Minuti</th>
                    <th>Secondi</th>
                    <th></th>
                    <th>Data giuliana</th>
                </tr>
                <tr>
                    <td><asp:TextBox ID="anno" runat="server" CssClass="data" Text="2009" /></td>
                    <td><asp:TextBox ID="mese" runat="server" CssClass="data" Text="4" /></td>
                    <td><asp:TextBox ID="giorno" runat="server" CssClass="data" Text="9" /></td>
                    <td><asp:TextBox ID="ora" runat="server" CssClass="data" Text="19" /></td>
                    <td><asp:TextBox ID="minuti" runat="server" CssClass="data" Text="47" /></td>
                    <td><asp:TextBox ID="secondi" runat="server" CssClass="data" Text="50" /></td>
                    <td>
                        <asp:Button ID="Button1" runat="server" Text="==>" CssClass="pulsante" />
                        
    
                        <asp:Button ID="Button2" runat="server" Text="<==" CssClass="pulsante" />
                    </td>
                    <td><asp:TextBox ID="data_giuliana" runat="server" CssClass="data_giuliana" /></td>
                </tr>
            </table>
        </div>
        </form>
    </body>
    </html>
    codice:
    Option Strict On
    Imports l = libreria.ModuloWeb
    
    Partial Class CorsoApogeo_date_data_giuliana
        Inherits System.Web.UI.Page
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.data_giuliana.Text = ""
            Dim dataAttuale As New DateTime(CInt(Me.anno.Text), CInt(Me.mese.Text), CInt(Me.giorno.Text), CInt(Me.ora.Text), CInt(Me.minuti.Text), CInt(Me.secondi.Text))
            Me.data_giuliana.Text = DataNormaleDataGiuliana(dataAttuale).ToString
        End Sub
    
        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
            Me.anno.Text = ""
            Me.mese.Text = ""
            Me.giorno.Text = ""
            Me.ora.Text = ""
            Me.minuti.Text = ""
            Me.secondi.Text = ""
    
            Dim dataAttuale As DateTime = DataGiulianaDataNormale(CDbl(Me.data_giuliana.Text))
            Me.anno.Text = dataAttuale.Year.ToString
            Me.mese.Text = dataAttuale.Month.ToString
            Me.giorno.Text = dataAttuale.Day.ToString
            Me.ora.Text = dataAttuale.Hour.ToString
            Me.minuti.Text = dataAttuale.Minute.ToString
            Me.secondi.Text = dataAttuale.Second.ToString
    
        End Sub
    
    
        Public Function DataNormaleDataGiuliana(ByVal dataAttuale As DateTime) As Double
            Dim anno As Integer = dataAttuale.Year
            Dim mese As Integer = dataAttuale.Month
            Dim giorno As Integer = dataAttuale.Day
            Dim ore As Integer = dataAttuale.Hour
            Dim minuti As Integer = dataAttuale.Minute
            Dim secondi As Integer = dataAttuale.Second
            Dim millisecondi As Integer = dataAttuale.Millisecond
    
            If mese = 1 OrElse mese = 2 Then
                anno -= 1
                mese += 12
            End If
    
            Dim a, b, c, d As Integer
    
            If dataAttuale < New DateTime(1582, 10, 15) Then
                a = 0
                b = 0
            Else
                a = CInt(Math.Floor(anno / 100))
                b = 2 - a + CInt(Math.Floor(a / 4))
            End If
    
            c = CInt(Math.Floor(365.25 * anno))
            d = CInt(Math.Floor(30.6001 * (mese + 1)))
    
            Dim dataGiuliana As Double = b + c + d + giorno + 1720994.5 '- reset
    
            Dim offsetGiornata As Double = ore / 24
            offsetGiornata = (60 * ore + minuti) / 1440
            offsetGiornata = (3600 * ore + 60 * minuti + secondi) / 86400
    
            Return dataGiuliana + offsetGiornata
    
        End Function
    
        Public Function DataGiulianaDataNormale(ByVal dataGiuliana As Double) As DateTime
            Dim jd As Double = dataGiuliana
            Dim i As Integer = CInt(Math.Floor(jd + 0.5))
            Dim f As Double = jd + 0.5 - i
            Dim a, b, c, d, e, h As Integer
    
            If i <= 2299160 Then
                b = i
            Else
                a = CInt(Math.Floor((i - 1867216.25) / 36524.25))
                b = i + 1 + a - CInt(Math.Floor(a / 4))
            End If
            c = b + 1524
            d = CInt(Math.Floor((c - 122.1) / 365.25))
            e = CInt(Math.Floor(365.25 * d))
            h = CInt(Math.Floor((c - e) / 30.6001))
    
            Dim giorno As Double = (c - e + f - CInt(Math.Floor(30.6001 * h)))
            Dim mese, anno As Double
            If h < 14 Then
                mese = h - 1
            Else
                mese = h - 13
            End If
    
            If mese < 3 Then
                anno = d - 4715
            Else
                anno = d - 4716
            End If
    
            Dim offsetGiornata, ore, minuti, secondi As Double
    
            offsetGiornata = ((dataGiuliana - CInt(Math.Floor(dataGiuliana))) * 86400)
            ore = Math.Floor((offsetGiornata / 3600))
            minuti = Math.Floor((offsetGiornata - 3600 * ore) / 60)
            secondi = offsetGiornata - 3600 * ore + 60 * minuti
    
            Dim o, m, s As Integer
            o = CInt((ore + 12) Mod 24)
            m = CInt(minuti Mod 60)
            s = CInt(secondi Mod 60)
    
            If s = 60 Then
                s = 0
                m += 1
            End If
    
            If m = 60 Then
                m = 0
                o += 1
            End If
    
    
            Dim dataAttuale As DateTime = New DateTime(CInt(Math.Floor(anno)), CInt(Math.Floor(mese)), CInt(Math.Floor(giorno)), o, m, s)
    
    
            Return dataAttuale
    
        End Function
    
    
    End Class
    Pietro

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.