2011-07-28 3 views
2

Travailler dans Visual Studio avec C#. Je fais un logiciel pour un petit bureau qui capture des poursuites. Une fois le procès terminé, le bureau dispose de 15 jours pour envoyer certains documents au tribunal. Donc, deadLine est dans 15 jours.Besoin d'ajouter des jours à une date, mais d'exclure certains jours d'un calendrier

Mais s'il y a par exemple, et mise à jour (update1) au procès, le bureau a maintenant une nouvelle ligne morte pour envoyer des documents update1.

Ainsi, DeadLine pour la capture est dd/MM/yyy Ensuite, DeadLine pour Update1 est jj/mm/aaaa

Mais je dois exclure tous les jours non du travail, de sorte que les délais ne présentent pas de travail non journées. Exemple:

Capture: 15 jours Update1: 5 jours Update2: 10 jours Update3: 7 jours

Donc, si je capture aujourd'hui, 28 Juillet 2011, 15 jours devrait être ajouté à la variable deadline, ce qui serait le 12 août, mais je dois exclure les jours non travaillés d'un calendrier. Par exemple le 12 août 2011.

J'ai changé la valeur DatePicker en chaîne, avec le format (jj/MM/aaaa), et je le compare à une liste de chaînes de jours non valides, avec le format (jj/MM/aaaa).

Et si la ligne morte tombe l'un de ces jours, je convertis deadLine en dateTime, ajouter 1 jour, jusqu'à ce qu'il ne tombe pas un de ces jours. Enregistrez ensuite la valeur finale dateTime en tant que nouvelle ligne morte.

Exemple:

string DeadLine; 
string NonValidDay001 = 12/08/2011; 
string NonValidDay001 = 15/08/2011; 
string NonValidDay001 = 19/08/2011; 

DeadLine = DatePicker01.Value.AddDays(15).ToString("dd/MM/yyyy"); 

while (DeadLine == NonValidDay001 | DeadLine == NonValidDay001 | DeadLine == NonValidDay001) 
{ 
    dateTime dt = Convert.toDateTime(DeadLine); 
    dt.AddDays(1).ToString("dd/MM/yyyy"); 
    DeadLine = dt; 
} 

Le problème que je vais avoir est, il n'ajoute jours à la date limite si dealine correspond jours non valides. Ce que je fais ne fonctionne pas du tout.

Quelqu'un pourrait-il m'éclairer s'il vous plaît? (=

+0

Voulez-vous également qu'il saute des jours de travail si les apparaissent dans les 15 jours? (pas seulement si la date de 15 jours du début est une journée de travail) –

Répondre

0

Si vous voulez sauter jours de travail pendant la période de temps (dans les 15 jours), vous pouvez utiliser les éléments suivants (non testé, typée droite ici):

public DateTime AddDaysExcluding(DateTime startDate, int days, params DateTime[] excludedDays) 
{ 
    while(days != 0) 
    { 
     if (excludedDays.Contains(startDate)) 
      startDate = startDate.AddDays(1); 

     startDate = startDate.AddDays(1); 
     days--; 
    } 

    if (excludedDays.Contains(startDate)) 
     startDate = startDate.AddDays(1); 
} 

Exemple d'utilisation:

DateTime deadline = AddDaysExcluding(DatePicker01.Value, 15, 
    new DateTime(2011, 8, 12), new DateTime(2011, 8, 15), new DateTime(2011, 8, 19)); 
+0

Je ne comprends pas très bien le code mais j'ai réussi à l'utiliser. Comment puis-je implémenter ceci dans mon code? Et oui, j'ai besoin de sauter les jours de travail dans le temps. (= – Yushell

+0

Vous ajouteriez cette méthode quelque part, puis l'appel, en passant votre date de début, le nombre de jours , puis tous vos jours de travail, soit sous forme de tableau, soit sous la forme d'une liste de paramètres.Voir ici: http://msdn.microsoft.com/en-us/library/w5zay9db(v=vs.100).aspx –

4

Vous devez modifier les paramètres suivants ...

dt.AddDays(1).ToString("dd/MM/yyyy"); 
DeadLine = dt; 

à ...

DeadLine = dt.AddDays(1).ToString("dd/MM/yyyy"); 

« La méthode AddDays ne change pas la valeur du DateTime., Il retourne au lieu un nouveau DateTime dont la valeur est le résultat de l'opération AddDays. "

Pour plus d'informations sur une fonction permettant d'ajouter des jours de travail à partir d'une certaine date, voir ce qui suit ...

C#: Adding working days from a cetain date

+0

Cela a beaucoup aidé. Merci. Mais j'ai toujours un problème. Tout comme George Duckett a dit. Je veux inclure les jours non travaillés dans les 15 jours. Cela a aidé avec le problème AddDays de toute façon (= – Yushell

+0

Pas de problème, j'ai mis à jour la réponse avec quelques informations supplémentaires qui peuvent vous aider.) – edge2

0

La ligne

dt.AddDays(1).ToString("dd/MM/yyyy"); 

ne mène à rien. DateTime s sont immuables. Tout ce que fait cette ligne est de créer un nouveau DateTime et un nouveau String qui ne sont jamais référencés.Je pense que vous voulez dire:

DeadLine = dt.AddDays(1).ToString("dd/MM/yyyy"); 

Cependant, il semble un peu étrange que vous utilisez String s plutôt que seulement DateTime s.

Questions connexes