Je jouais avec la méthode Datetime.ParseExact, et il veut un IFormatProvider ...
Cela fonctionne en entrant null, mais que fait-il exactement?
c#
asp.net
iformatprovider
Moulde
la source
la source
Réponses:
En plus de la réponse d'Ian Boyd:
Implémente également
CultureInfo
cette interface et peut être utilisée dans votre cas. Ainsi, vous pouvez analyser une chaîne de date française par exemple; tu pourrais utiliserla source
DateTime.ParseExact(string, string, IFormatProvider)
place, je crois - en tant que tel:DateTime.ParseExact("20160409 111559","yyyyMMdd HHmmss",CultureInfo.CurrentCulture)
DateTime dt = DateTime.Parse(yourDateInputString, ci);
Veuillez réviser votre réponse.L'
IFormatProvider
interface est normalement implémentée pour vous par uneCultureInfo
classe, par exemple:CultureInfo.CurrentCulture
CultureInfo.CurrentUICulture
CultureInfo.InvariantCulture
CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)
L'interface est une passerelle permettant à une fonction d'obtenir un ensemble de données spécifiques à une culture à partir d'une culture. Les deux objets de culture couramment disponibles pour lesquels un
IFormatProvider
peut être interrogé sont:DateTimeFormatInfo
NumberFormatInfo
La façon dont cela fonctionnerait normalement est de demander au
IFormatProvider
de vous donner unDateTimeFormatInfo
objet:Il y a aussi une connaissance interne que toute
IFormatProvider
interface est probablement implémentée par une classe qui descendCultureInfo
ou descend deDateTimeFormatInfo
, vous pouvez donc convertir l'interface directement:Mais ne fais pas ça
Tout ce travail acharné a déjà été écrit pour vous:
Pour obtenir un
DateTimeFormatInfo
d'unIFormatProvider
:Pour obtenir un
NumberFormatInfo
d'unIFormatProvider
:La valeur de
IFormatProvider
est que vous créez vos propres objets de culture. Tant qu'ils implémententIFormatProvider
et retournent les objets qui leur sont demandés, vous pouvez contourner les cultures intégrées.Vous pouvez également l'utiliser
IFormatProvider
pour transmettre des objets de culture arbitraires - via leIFormatProvider
. Par exemple, le nom de Dieu dans différentes culturesCela permet à votre
LordsNameFormatInfo
classe personnalisée de circuler à l'intérieur d'unIFormatProvider
, et vous pouvez préserver l'idiome.En réalité, vous n'aurez jamais besoin d'appeler la
GetFormat
méthode deIFormatProvider
vous - même.Chaque fois que vous en avez besoin,
IFormatProvider
vous pouvez passer unCultureInfo
objet:la source
Passer null comme le
IFormatProvider
n'est pas la bonne façon de procéder. Si l'utilisateur a un format de date / heure personnalisé sur son PC, vous rencontrerez des problèmes d'analyse et de conversion en chaîne. Je viens de corriger un bogue où quelqu'un avait passé null comme IFormatProvider lors de la conversion en chaîne.Au lieu de cela, vous devriez utiliser
CultureInfo.InvariantCulture
Faux:
Correct:
la source
CultureInfo.InvariantCulture
placeCultureInfo.CurrentCulture
?null
sera par défautCultureInfo.CurrentCulture
. Voir l'appel dans la source de référence , si vous suivez la chaîne d'appels, le null est finalement remplacé parDateTimeFormatInfo.CurrentInfo
ce qui équivaut à quellesCultureInfo.CurrentCulture
sorties.IFormatProvider fournit des informations de culture à la méthode en question. DateTimeFormatInfo implémente IFormatProvider et vous permet de spécifier le format dans lequel vous voulez que votre date / heure soit affichée. Des exemples peuvent être trouvés sur les pages MSDN appropriées.
la source
Vous pouvez voir ici http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx
Voir les remarques et la section exemple ici.
la source
IFormatProvider
ne pas utiliserIFormatProvider
.Consultez http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx pour l'API.
la source
Par MSDN
Le .NET Framework comprend les trois implémentations IFormatProvider prédéfinies suivantes pour fournir des informations spécifiques à la culture qui sont utilisées dans le formatage ou l'analyse des valeurs numériques et de date et d'heure:
NumberFormatInfo
classe, qui fournit des informations utilisées pour mettre en forme les nombres, telles que la devise, le séparateur de milliers et les symboles de séparateur décimal pour une culture particulière. Pour plus d'informations sur les chaînes de format prédéfinies reconnues par unNumberFormatInfo
objet et utilisées dans les opérations de formatage numérique, consultez Chaînes de format numérique standard et Chaînes de format numérique personnalisées.DateTimeFormatInfo
classe, qui fournit des informations utilisées pour mettre en forme les dates et les heures, telles que les symboles de séparation de date et d'heure pour une culture particulière ou l'ordre et le format des composants année, mois et jour d'une date. Pour plus d'informations sur les chaînes de format prédéfinies reconnues par unDateTimeFormatInfo
objet et utilisées dans les opérations de formatage numérique, consultez Chaînes de format de date et d'heure standard et Chaînes de format de date et d'heure personnalisées.CultureInfo
classe, qui représente une culture particulière. SaGetFormat
méthode renvoie un objetNumberFormatInfo
ou unDateTimeFormatInfo
objet propre à la culture , selon que l'CultureInfo
objet est utilisé dans une opération de mise en forme ou d'analyse qui implique des nombres ou des dates et des heures.Le .NET Framework prend également en charge la mise en forme personnalisée. Cela implique généralement la création d'une classe de mise en forme qui implémente à la fois IFormatProvider et ICustomFormatter. Une instance de cette classe est ensuite transmise en tant que paramètre à une méthode qui effectue une opération de mise en forme personnalisée, telle que
String.Format(IFormatProvider, String, Object[])
.la source
La classe DateTimeFormatInfo implémente cette interface, elle vous permet donc de contrôler la mise en forme de vos chaînes DateTime.
la source