MPXJ in .NET conversione Java Data di .NET DateTime
-
27-09-2019 - |
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.
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));
}