Question

J'utilise la bibliothèque MPXJ dans .NET pour analyser les fichiers MS Project (MPP), et cela fonctionne très bien. La question que j'ai essaye de traduire la tâche départ et d'arrivée date dans .NET DateTime à utiliser avec mes modèles de données.

Je vais à travers toutes les tâches et appeler task.getFinish () et task.getStart () que les deux objets retour javva.util.Date.

Quand j'utilise task.getFinish (). GetYear (), task.getFinish (). GetMonth (), etc. pour construire un nouvel objet DateTime il me prévient qu'ils sont obsolètes.

Quelle est la meilleure façon d'obtenir les dates de départ et d'arrivée de MPXJ dans un objet DateTime .NET?

Merci.

Était-ce utile?

La solution

J'utilise aussi MPXJ et eu le même problème. Il y a deux façons de traiter cette question. Je vais décrire deux façons ci-dessous (je l'ai utilisé à la fois et je ne suis pas sûr de mieux):

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))

Ceci est la façon dont ils veulent que vous fassiez quand ils disent que .getYear est obsolète.

L'autre façon que je l'ai fait est de convertir la date Java à une chaîne, puis utiliser Date.parse pour l'obtenir dans une variable Date .NET. J'utilise un type Nullable parce que la date Java pourrait être nulle.

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

Vous pouvez utiliser une chaîne de format de date différente si vous n'avez pas besoin de toutes les parties, ou si vous voulez inclure des informations de fuseau horaire. Voici une liste des pour Java .

Mise à jour

Une autre façon, peut-être plus performant de le faire (que l'analyse des chaînes) est le suivant:

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

Autres conseils

Je sais que je suis plus de deux ans de retard sur celui-ci, mais dans le cas où il est utile de vous ou quelqu'un d'autre lecture de ce fil, voici une méthode simple peu d'extension j'ai jeté ensemble (en C #) pour gérer cette conversion:

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));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top