Domanda

Sto utilizzando la libreria MPXJ in .NET per analizzare file di MS Project (MPP), e sta funzionando grande. Il problema che sto avendo uno sta cercando di tradurre il compito Data di inizio e finitura in .NET DateTime per l'uso con i miei modelli di dati.

vado attraverso tutte le attività e chiamando task.getFinish () e task.getStart () che entrambi gli oggetti di ritorno javva.util.Date.

Quando uso task.getFinish (). GetYear (), task.getFinish (). GetMonth (), ecc per costruire un nuovo oggetto DateTime che mi avverte che sono obsoleti.

Qual è il modo migliore per ottenere le date di inizio e fine da MPXJ in un oggetto .NET DateTime?

Grazie.

È stato utile?

Soluzione

Sono anche utilizzando MPXJ e avuto lo stesso problema. Ci sono un paio di modi per affrontare questo. Io delineare due modi di seguito (ho usato entrambi e non sono sicuro che è meglio):

Dim cal As New GregorianCalendar()
cal.setTime(task.getStart())

'have to add one to month value because it is 0 - 11
Dim startDate as New Date(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND))

Questo è il modo in cui loro vogliono che tu lo faccia quando dicono che .getYear è obsoleto.

L'altro modo che ho fatto è quello di convertire la data Java in una stringa e quindi utilizzare Date.parse per farlo in una variabile .NET Data. Io uso un tipo nullable perché la data Java potrebbe essere nullo.

Dim d as java.util.Date = t.getStart()
Dim startDate As New Nullable(Of Date)

If d IsNot Nothing Then
    Dim dateString As String = New java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d)

    startDate  = Date.Parse(dateString)
End If

È possibile utilizzare una stringa di formato data diversa, se non avete bisogno di tutte le parti, o se si desidera includere informazioni fuso orario. Ecco un elenco dei scelte format string per Java .

Aggiorna

Un altro modo forse più performante di fare questo (di parsing della stringa) è il seguente:

Dim startDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(d.getTime()).ToLocalTime();

Altri suggerimenti

Lo so che sono più di due anni di ritardo su questo, ma nel caso in cui è utile a voi o chiunque altro la lettura di questa discussione, ecco un metodo semplice piccola estensione ho buttato insieme (in C #) per gestire questa conversione:

internal static DateTime ToDateTime(this java.util.Date javaDate)
{
    var cal = java.util.Calendar.getInstance();
    cal.setTime(javaDate);

    // note that the Month component of java.util.Date  
    // from 0-11 (i.e. Jan == 0)
    return new DateTime(cal.get(java.util.Calendar.YEAR),
                        cal.get(java.util.Calendar.MONTH) + 1,
                        cal.get(java.util.Calendar.DAY_OF_MONTH),
                        cal.get(java.util.Calendar.HOUR_OF_DAY),
                        cal.get(java.util.Calendar.MINUTE),
                        cal.get(java.util.Calendar.SECOND));
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top