Je prends des données à partir d'une feuille Excel, et les valeurs pour d'autres scénarios où ils échangent jour et mois , Je voudrais juste attraper une exception à ce sujet. P> J'ai essayé plusieurs méthodes, telles que des variations parseexact, mais je reçois toujours des problèmes avec l'une ou l'autre. P> y a-t-il un générique solution capable de gérer les situations ci-dessus? p> J'utilise actuellement les éléments suivants: P> DateTime Code> varient selon les permutations suivantes: public DateTime ParseDateAndTime(string dateValue, int? timeValue)
{
var combinedDate = $"{dateValue} {(timeValue ?? 0) / 100}:{(timeValue ?? 0) % 100}";
return DateTime.ParseExact(combinedDate, "d/M/yyyy H:m", CultureInfo.InvariantCulture);
}
4 Réponses :
Je suppose que vous ne connaissez pas le format spécifique de chaque valeur code> DateTime code> lorsque vous le lisez à partir d'Excel, correct? Comment obtenez-vous les données? Par exemple, si vous ouvrez directement le fichier Excel en utilisant Interop ou quelque chose d'autre, vous pouvez essayer de lire le ou obtenez-vous les valeurs de date comme une liste bronde sans la référence à la feuille Excel / Excel? Ensuite, vous pouvez essayer d'utiliser CellFormat CODE> de la cellule spécifique. Bien sûr, cela exige que le format du DateTime code> soit correctement défini dans la feuille Excel File / Excel. p>
trypseexact code> à l'aide de différents formats de date et de voir quels matchs comme trypseeexact code> renvoie un booléen en conséquence. Peu de temps peut être une date comme le 12/12/2020 - Le 12 est valide pour le mois et pour la journée. Par conséquent, il est nécessaire d'obtenir le format d'une manière ou d'une autre. P>
Nous avons un format spécifié, qui est (jj / mm / aaayy hhmm). Mais les utilisateurs peuvent toucher un chiffre à un seul chiffre de jour / mois, et je voudrais le gérer ...
Je vois - ma faute. J'ai pensé ou compris que DD et MM peuvent se mélanger dans leur position. Par exemple: jj / mm / aaaa - mm / jj / aaaa. Devrait-il mieux lire la prochaine fois.
Si vous essayez d'obtenir une date d'Excel, et que les données sont stockées comme date dans Excel, essayez de l'obtenir comme objet DateTime à l'aide de s'il est stocké en tant que String et le Par exemple: P> Plage.Value code>. datetime.parseexact () code> DateTime.Parseexact () code> ne fonctionne pas, cependant, je vous conseillerai d'écrire une fonction vous-même pour analyser la chaîne. P> public static DateTime getDate(string date)
{
string[] splitedDate = date.Split('/');
int day;
if (int.TryParse(splitedDate[0], out day)) ;
else
{
throw new ArgumentException();
}
int month;
if (int.TryParse(splitedDate[1], out month)) ;
else
{
throw new ArgumentException();
}
int year;
if (int.TryParse(splitedDate[2], out year)) ;
else
{
throw new ArgumentException();
}
return new DateTime(year, month, day);
}
Ça fonctionne:
public DateTime ParseDateAndTime(string dateValue)
{
return DateTime.ParseExact(dateValue, "d/M/yyyy HHmm", CultureInfo.InvariantCulture);
}
Vous pouvez voir que vous avez une date comme chaîne, mais votre valeur de temps pourrait être null. Par conséquent, je suggérerais une séparation de vous analyser en 2 étapes date et heure. L'autre chose est que je le retournerais comme un objet DateTime, je peux donc l'utiliser comme je le souhaite à condition d'utiliser parseexact. De cette façon si votre temps est NULL ou si vous avez un problème, vous aurez toujours votre datère.
Vous pouvez également bien sûr, si la date n'est pas analysée, ajout d'une condition et retourner une date par défaut à Stead, Thorw Exception ou autre chose.
juste un exemple de base, une chose comme celle-ci: p> Si vous auriez besoin de lancer une exception, vous faites quelque chose comme: P> public class MyDateTimeObject
{
public DateTime ParsedDatetime { get; set; }
public bool ParsingIssue { get; set; }
}
Si l'entrée est E.G. 3/13/2020 CODE>, est-il possible de signaler comme format incorrect? Comme le format d'insérer sur CRM code> est dd / mm / yyyy`, je rencontrerais une exception au format.
Vérifiez la dernière mise à jour, au lieu d'exception, vous pouvez faire quelque chose d'autre. Vous pouvez présenter votre modèle de données comprenant un objet DateTime analysé et éventuellement les erreurs, si vous avez besoin d'exemple, je peux améliorer mon exemple
Puis-je savoir si le DateTime.trypsarse ("3/13/2020", OUT VAR DATEDPARSED) CODE> ci-dessus sera toujours vrai code>?
Lorsque cette méthode ne peut pas analyser, une variable isdateparsed sera fausse
@gymcode à quoi ça ressemble, pouvez-vous utiliser la solution?
Merci, votre méthode a fonctionné, mais j'ai des problèmes de validation car il accepte toujours mm / jj / aaaa code>. J'ai utilisé la méthode d'Alex dans l'intervalle.
Avez-vous les valeurs de date et d'heure comme un tout ou comme deux valeurs distinctes?