2009-09-06 7 views
8

Actuellement, je suis en utilisant le code suivant pour obtenir année, mois, jour du mois, l'heure et les minutes Groovy:Groovy/Grails classe date - obtenir le jour du mois

Date now = new Date() 
Integer year = now.year + 1900 
Integer month = now.month + 1 
Integer day = now.getAt(Calendar.DAY_OF_MONTH) // inconsistent! 
Integer hour = now.hours 
Integer minute = now.minutes 
// Code that uses year, month, day, hour and minute goes here 

En utilisant getAt(Calendar.DAY_OF_MONTH) pour la journée de le mois semble un peu incohérent dans ce contexte. Y a-t-il un moyen plus court d'obtenir le jour du mois?

+0

Pourquoi faites-vous maintenant.année + 1900? –

+0

Mykola: new Date(). L'année est actuellement 109, d'où la nécessité d'ajouter 1900. – knorv

+0

Mais pourquoi l'ajoutez-vous à une 'année' et ne l'utilisez pas? –

Répondre

11

Si vous ajoutez ce qui suit à votre code devrait affecter le jour du mois au jour entier:

Integer day = now.date 

est ici un stand-alone exemple:

def now = Date.parse("yyyy-MM-dd", "2009-09-15") 
assert 15 == now.date 
+0

Merci! Je ne sais pas comment je pourrais le manquer! – knorv

+2

Peut-être vous l'avez manqué à cause de l'API horrible! – Armand

7

Toutes ces lignes ne sont-elles pas des déchets? Les deux lignes suivantes font le travail dans un groovysh

date = new Date() 
date.getAt(Calendar.DAY_OF_MONTH) 

Pour utiliser votre code réel et non dans la console

def date = new Date() 
def dayOfMonth = date.getAt(Calendar.DAY_OF_MONTH) 
+0

Est-ce une réponse? – knorv

+0

Ce code me donne 6 à la console de groovysh. Si c'est ce que vous voulez que c'est la réponse. –

+1

Le problème n'est pas d'obtenir le jour du mois. Le problème est de le faire de manière cohérente. – knorv

2

La façon dont vous le faites est la seule façon. L'objet java date stocke le mois et le jour, mais ne stocke aucune information telle que la durée du mois ou le jour du mois. Vous devez utiliser la classe Calendar pour trouver beaucoup de ces informations.

1

Cette version est assez laconique:

Calendar.instance.get(Calendar.DAY_OF_MONTH) 
+1

Absolument, mais le comparer aux autres lignes. Je cherchais une façon cohérente de le faire. – knorv

0

Vous pouvez obtenir juste le jour du mois d'une Date Groovy comme ceci:

​Date date = new Date() 
int dayOfMonth = date[Calendar.DAY_OF_MONTH] 
Questions connexes