2008-09-17 6 views
3

Existe-t-il un moyen d'analyser une chaîne au format HH: MM dans un objet Date (ou autre) en utilisant les bibliothèques standard?Analyse temporelle dans Flex

Je sais que je peux analyser quelque chose comme « 17/09/2008 10:30 » dans un objet Date à l'aide

var date:Date = new Date(Date.parse("9/17/2008 10:30"); 

Mais je veux analyser juste 10:30 par lui-même. Le code suivant ne fonctionnera pas.

var date:Date = new Date(Date.parse("10:30"); 

Je sais que je peux utiliser un RegEx personnalisé pour le faire assez facilement, mais il semble que cela devrait être possible en utilisant l'API Flex existant.

Répondre

0

Pour répondre à votre question spécifique: non, il n'y a pas de fonction de bibliothèque pour faire ce que vous voulez faire, mais il n'y a pas de fonction bibliothèque pour l'analyse des dates au format ISO, au format allemand, les années sont en chiffres romains, etc.

Pourquoi ne pas utiliser des expressions régulières? C'est ce qu'ils sont pour.

+3

Vous le faites paraître idiot d'avoir posé la question ... Ce qui est indu. La plupart des langages ont au moins une bibliothèque pour l'analyse des dates et des heures, donc penser que Flex supporte une telle fonctionnalité est assez raisonnable. –

+1

FLEX Date Les objets sont horribles. Ils veulent vraiment appeler cette "entreprise" digne? Ils ont besoin de monter leur jeu dans ce domaine mal. – D3vtr0n

1

Avez-vous envisagé d'ajouter «01/01/2000» à la chaîne de temps, puis d'appliquer la date?

Alternativement il y a probablement un tokenizer qui prendra l'entrée et la divisera en: vous donnant un tableau de chaînes que vous pouvez convertir en entiers. Un tokenizer n'est pas difficile à écrire, et peut être amusant s'il n'existe pas en flex.

-Adam

3

Si vous devez utiliser le format exact que vous avez spécifié, alors vous devez analyser vous-même.

Voici un exemple simple (non testé):

var str:String = "9/17/2008 10:30" 

var items:Array = str.split(" "); 
var dateElements:Array = items[0].split("/"); 
var timeElements:Array = items[1].split(":"); 

var n:Date = new Date(dateElements[2], 
         dateElements[0], 
         dateElements[1]. 
         timeElements[0], 
         timeElements[1]); 

Si l'heure est exprimée en 24 horloge, alors il n'y a aucun moyen de vérifier AM ou PM (code prendra AM).

+0

Ce code n'est pas nécessaire. L'exemple original que j'ai donné (collé ci-dessous) fonctionne très bien. var date: Date = new Date (Date.parse ("9/17/2008 10:30"); –

+1

Il y a une petite faute de frappe dans les paramètres du constructeur Date.Modifiez la virgule suivant dateElements [1] en virgule (ie, ** dateElements [1]. ** -> ** dateElements [1], **) – cbranch

+1

Encore une fois ... il y a un autre problème plus important: Flex s'attend à un mois basé sur 0, donc vous devez soustraire un à partir du mois passé au constructeur Date – cbranch

2

En tant que solution simple et gratuite, vous pouvez utiliser des méthodes statiques du DateField:

  • DateField.stringToDate (valueString: String, inputFormat: String): Date
  • DateField.dateToString (valeur: Date, outputFattern: String): String

Malheureusement, ils ne prennent pas en charge les heures/minutes/secondes (juste la date).

Dans votre cas spécifique: l'objet Date contient toujours aussi une information "date" .. si elle n'est pas importante, ne pourriez-vous pas simplement concaténer une chaîne de date standard avant l'analyse?