Réponses:
Vous pouvez utiliser:
import java.util.Calendar
Date currentTime = Calendar.getInstance().getTime();
Calendrier contient de nombreuses constantes pour tout ce dont vous avez besoin.
Edit:
Vérifier la documentation de la classe Calendar
Calendar.getInstance().getTime()
ou Calendar.getInstance().getTimeInMillis()
fonctionnera.
Vous pouvez ( mais ne devriez plus - voir ci-dessous!) Utiliser android.text.format.Time :
Time now = new Time();
now.setToNow();
De la référence liée ci-dessus:
La classe Time remplace plus rapidement les classes java.util.Calendar et java.util.GregorianCalendar. Une instance de la classe Time représente un instant dans le temps, spécifié avec une seconde précision.
REMARQUE 1: Cela fait plusieurs années que j'ai écrit cette réponse, et il s'agit d'une ancienne classe spécifique à Android et maintenant obsolète. Google indique désormais que "[t] sa classe a un certain nombre de problèmes et il est recommandé d'utiliser GregorianCalendar à la place".
REMARQUE 2: même si la Time
classe a une toMillis(ignoreDaylightSavings)
méthode, il s'agit simplement d'une commodité à passer aux méthodes qui attendent du temps en millisecondes. La valeur de temps n'est précise qu'à une seconde ; la partie en millisecondes est toujours 000
. Si vous êtes en boucle
Time time = new Time(); time.setToNow();
Log.d("TIME TEST", Long.toString(time.toMillis(false)));
... do something that takes more than one millisecond, but less than one second ...
La séquence résultante répétera la même valeur, par exemple 1410543204000
, jusqu'à ce que la seconde suivante ait commencé, moment auquel la 1410543205000
répétition commencera.
SystemClock.uptimeMillis()
chronométrage d'intervalle. Étant donné que c'est ce que la plupart des fonctions intégrées utilisent, il y a une forte motivation pour qu'il soit bien implémenté sur tous les appareils. Voir la discussion dans SystemClock ... Si vous voulez corréler cela avec l'heure de la journée, dans l'application onResume, lisez ceci et Time / setToNow / toMillis. Rappelez-vous la différence entre ceux-ci.
GregorianCalendar
été supplanté il y a des années en Java et plus tard en Android par les classes java.time , en particulier ZonedDateTime
. Pour les versions antérieures d'Android, consultez les projets ThreeTen-Backport et ThreeTenABP .
Si vous souhaitez obtenir la date et l'heure dans un modèle spécifique, vous pouvez utiliser ce qui suit:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());
Ou,
Date :
String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());
Temps:
String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
au milieu
Pour ceux qui préfèrent plutôt un format personnalisé, vous pouvez utiliser:
DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());
Alors que vous pouvez avoir des modèles DateFormat tels que:
"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
En fait, il est plus sûr de définir le fuseau horaire actuel sur l'appareil avec Time.getCurrentTimezone()
, sinon vous obtiendrez l'heure actuelle en UTC.
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
Ensuite, vous pouvez obtenir tous les champs de date souhaités, comme par exemple:
textViewDay.setText(today.monthDay + ""); // Day of the month (1-31)
textViewMonth.setText(today.month + ""); // Month (0-11)
textViewYear.setText(today.year + ""); // Year
textViewTime.setText(today.format("%k:%M:%S")); // Current time
Voir la classe android.text.format.Time pour tous les détails.
MISE À JOUR
Comme beaucoup de gens le soulignent, Google dit que cette classe a un certain nombre de problèmes et n'est plus censée être utilisée:
Cette classe a un certain nombre de problèmes et il est recommandé d'utiliser GregorianCalendar à la place.
Problèmes connus:
Pour des raisons historiques, lors de l'exécution des calculs de temps, toute l'arithmétique est actuellement effectuée à l'aide d'entiers 32 bits. Cela limite la plage de temps fiable représentable de 1902 à 2037.Voir l'article wikipedia sur le problème de l'année 2038 pour plus de détails. Ne comptez pas sur ce comportement; cela pourrait changer à l'avenir. L'appel de switchTimezone (String) à une date qui ne peut pas exister, telle qu'une heure de mur qui a été ignorée en raison d'une transition DST, entraînera une date en 1969 (c'est-à-dire -1, ou 1 seconde avant le 1er janvier 1970 UTC). Une grande partie du formatage / de l'analyse suppose du texte ASCII et ne convient donc pas à une utilisation avec des scripts non ASCII.
Pour la date et l'heure actuelles, utilisez:
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Quelles sorties:
Feb 27, 2012 5:41:23 PM
Essayez de cette façon Tous les formats sont indiqués ci-dessous pour obtenir le format de la date et de l'heure.
Calendar c = Calendar.getInstance();
SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
String datetime = dateformat.format(c.getTime());
System.out.println(datetime);
Instant.now() // Current moment in UTC.
…ou…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Les autres réponses, bien que correctes, sont obsolètes. Les anciennes classes de date-heure se sont avérées mal conçues, déroutantes et gênantes.
Ces anciennes classes ont été remplacées par le framework java.time .
Ces nouvelles classes sont inspirées du projet Joda-Time , qui a connu un grand succès , défini par JSR 310 et étendu par le projet ThreeTen-Extra .
Voir le didacticiel Oracle .
Instant
An Instant
est un moment sur la timeline en UTC avec une résolution allant jusqu'à nanosecondes .
Instant instant = Instant.now(); // Current moment in UTC.
Appliquez un fuseau horaire ( ZoneId
) pour obtenir un ZonedDateTime
. Si vous omettez le fuseau horaire, le fuseau horaire par défaut actuel de votre machine virtuelle Java est implicitement appliqué. Mieux vaut spécifier explicitement le fuseau horaire souhaité / attendu.
Utilisez les noms de fuseau horaire approprié dans le format de continent/region
tels que America/Montreal
, Europe/Brussels
ou Asia/Kolkata
. N'utilisez jamais les abréviations de 3 à 4 lettres telles que EST
ou IST
car elles ne sont ni standardisées ni uniques.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Vous pouvez facilement générer une String
représentation textuelle de la valeur date-heure. Vous pouvez choisir un format standard, votre propre format personnalisé ou un format localisé automatiquement.
Vous pouvez appeler les toString
méthodes pour mettre le texte en forme à l'aide de la norme ISO 8601 commune et sensée .
String output = instant.toString();
2016-03-23T03: 09: 01.613Z
Notez que pour ZonedDateTime
, la toString
méthode étend la norme ISO 8601 en ajoutant le nom du fuseau horaire entre crochets. Informations extrêmement utiles et importantes, mais pas standard.
2016-03-22T20: 09: 01.613-08: 00 [Amérique / Los_Angeles]
Ou spécifiez votre propre modèle de mise en forme avec la DateTimeFormatter
classe.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
Spécifiez un Locale
pour une langue humaine (anglais, français , etc.) à utiliser pour traduire le nom du jour / mois et également pour définir les normes culturelles telles que l'ordre de l'année, du mois et de la date. Notez que cela Locale
n'a rien à voir avec le fuseau horaire.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
Mieux encore, laissez java.time faire le travail de localisation automatiquement.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) ); // Or Locale.CANADA_FRENCH and so on.
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date
, Calendar
, et SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers java.time classes .
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de java.sql.*
cours.
Où obtenir les classes java.time?
Instant.now()
et ZonedDateTime.now()
est requis API 26
Pour l'heure actuelle, vous pouvez utiliser System.currentTimeMillis()
ce qui est standard en Java. Ensuite, vous pouvez l'utiliser pour créer une date
Date currentDate = new Date(System.currentTimeMillis());
Et comme mentionné par d'autres pour créer un temps
Time currentTime = new Time();
currentTime.setToNow();
Cannot resolve constructor Date()
dans Android, le SDK Android utilise un mélange de Java 6 et 7.
Date currentDate = new Date(System.currentTimeMillis());
est correct
new Date(System.currentTimeMillis())
en faux : (a) c'est redondant, car c'est exactement la même chose que new Date()
. (b) La java.util.Date
classe gênante est désormais supplantée à java.time.Instant
partir de Java 8 et versions ultérieures. Rétroporté vers Java 6 et 7 dans le projet ThreeTen-Backport et vers une version antérieure d'Android (<26) dans ThreeTenABP .
Vous pouvez utiliser le code:
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Production:
2014-11-11 00:47:55
Vous disposez également d'options de mise en forme supplémentaires à SimpleDateFormat
partir d' ici .
java.util.Date
, java.util.Calendar
et java.text.SimpleDateFormat
sont désormais héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir Tutoriel par Oracle .
Facile, vous pouvez disséquer l'heure pour obtenir des valeurs distinctes pour l'heure actuelle, comme suit:
Calendar cal = Calendar.getInstance();
int millisecond = cal.get(Calendar.MILLISECOND);
int second = cal.get(Calendar.SECOND);
int minute = cal.get(Calendar.MINUTE);
//12 hour format
int hour = cal.get(Calendar.HOUR);
//24 hour format
int hourofday = cal.get(Calendar.HOUR_OF_DAY);
Il en va de même pour la date, comme suit:
Calendar cal = Calendar.getInstance();
int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
int year = cal.get(Calendar.YEAR);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);
Il existe plusieurs options car Android est principalement Java, mais si vous souhaitez l'écrire dans une TextView, le code suivant ferait l'affaire:
String currentDateTimeString = DateFormat.getDateInstance().format(new Date());
// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
Calendar
ou GregorianCalendar
. La Date
classe est obsolète.
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");
String currentDateandTime = databaseDateTimeFormate.format(new Date()); //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date()); //2009-06-30
String currentDateandTime = sdf1.format(new Date()); //30.06.09
String currentDateandTime = sdf2.format(new Date()); //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date()); //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date()); //8:29 PM
String currentDateandTime = sdf5.format(new Date()); //8:29
String currentDateandTime = sdf6.format(new Date()); //8:28:36:249
String currentDateandTime = sdf7.format(new Date()); //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date()); //2009.June.30 AD 08:29 AM
Modèles de format de date
G Era designator (before christ, after christ)
y Year (e.g. 12 or 2012). Use either yy or yyyy.
M Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
d Day in month. Number of d's determine length of format (e.g. d or dd)
h Hour of day, 1-12 (AM / PM) (normally hh)
H Hour of day, 0-23 (normally HH)
m Minute in hour, 0-59 (normally mm)
s Second in minute, 0-59 (normally ss)
S Millisecond in second, 0-999 (normally SSS)
E Day in week (e.g Monday, Tuesday etc.)
D Day in year (1-366)
F Day of week in month (e.g. 1st Thursday of December)
w Week in year (1-53)
W Week in month (0-5)
a AM / PM marker
k Hour in day (1-24, unlike HH's 0-23)
K Hour in day, AM / PM (0-11)
z Time Zone
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
textView.setText(""+mDay+"-"+mMonth+"-"+mYear);
Il s'agit d'une méthode qui sera utile pour obtenir la date et l'heure:
private String getDate(){
DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
String date=dfDate.format(Calendar.getInstance().getTime());
DateFormat dfTime = new SimpleDateFormat("HH:mm");
String time = dfTime.format(Calendar.getInstance().getTime());
return date + " " + time;
}
Vous pouvez appeler cette méthode et obtenir les valeurs de date et d'heure actuelles:
2017/01//09 19:23
SimpleDateFormat
s et 2 Date
s ... ne pouvez-vous pas simplement utiliser une fois "yyyy/MM/dd HH:mm"
le format et le calendrier des appels?
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println("time => " + dateFormat.format(cal.getTime()));
String time_str = dateFormat.format(cal.getTime());
String[] s = time_str.split(" ");
for (int i = 0; i < s.length; i++) {
System.out.println("date => " + s[i]);
}
int year_sys = Integer.parseInt(s[0].split("/")[0]);
int month_sys = Integer.parseInt(s[0].split("/")[1]);
int day_sys = Integer.parseInt(s[0].split("/")[2]);
int hour_sys = Integer.parseInt(s[1].split(":")[0]);
int min_sys = Integer.parseInt(s[1].split(":")[1]);
System.out.println("year_sys => " + year_sys);
System.out.println("month_sys => " + month_sys);
System.out.println("day_sys => " + day_sys);
System.out.println("hour_sys => " + hour_sys);
System.out.println("min_sys => " + min_sys);
Pour la date et l'heure actuelles avec format, utilisez
En Java
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)
À Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val current = LocalDateTime.now()
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
var myDate: String = current.format(formatter)
Log.d("Date","DATE : " + myDate)
} else {
var date = Date()
val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
val myDate: String = formatter.format(date)
Log.d("Date","DATE : " + myDate)
}
Modèles de formatage de date
"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
SimpleDateFormat
classe notoirement gênante et obsolète . Même avant Oreo dont vous n'avez pas besoin, vous pouvez utiliser à la place ThreeTenABP , le backport de java.time, l'API Java moderne de date et d'heure.
Si vous avez besoin de la date actuelle:
Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);
Si vous avez besoin de l'heure actuelle:
int mHour = cc.get(Calendar.HOUR_OF_DAY);
int mMinute = cc.get(Calendar.MINUTE);
System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));
Pour un format d'heure et de date personnalisé:
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
String cDateTime=dateFormat.format(new Date());
La sortie est comme le format ci-dessous: 2015-06-18T10: 15: 56-05: 00
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Vous pouvez obtenir la date en utilisant:
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");
Cela vous donnera un résultat sous une belle forme, comme dans cet exemple: "2014/02/09".
Time t = new Time();
utilisera le fuseau horaire par défaut. D'après mon expérience, par défaut == actuel.
Eh bien, j'ai eu des problèmes avec certaines réponses de l'API, donc je fusionne ce code, j'espère qu'il les sert les gars:
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date1 = t.format("%Y/%m/%d");
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
Locale.ENGLISH);
String var = dateFormat.format(date);
String horafecha = var+ " - " + date1;
tvTime.setText(horafecha);
Sortie: 15h25 - 03/10/2017
Vous pouvez simplement utiliser le code suivant:
DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
String time = df.format(Calendar.getInstance().getTime());
DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
String date = df1.format(Calendar.getInstance().getTime());
Essaye ça
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
La méthode ci-dessous renverra la date et l'heure actuelles dans la chaîne, utilisez un fuseau horaire différent en fonction de votre fuseau horaire réel.J'ai utilisé GMT
public static String GetToday(){
Date presentTime_Date = Calendar.getInstance().getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormat.format(presentTime_Date);
}
Vous devez utiliser la classe Calender selon la nouvelle API. La classe de date est désormais obsolète.
Calendar cal = Calendar.getInstance();
String date = ""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);
String time = ""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);
Essayez d'utiliser le code ci-dessous:
Date date = new Date();
SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());
String currentDate = dateFormatWithZone.format(date);