¿Cómo conseguir mes y día en android?

Necesito conseguir mes y día como: 01 para enero, 02 para febrero … y 01 para el primer día del mes, etc … He intentado esto:

String dd = c.get(Calendar.YEAR) + "-" + c.get(Calendar.MONTH) + "-" + c.get(Calendar.DAY_OF_MONTH) + " " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get((Calendar.SECOND)); 

pero tengo algo como esto:

 2011-8-1 12:05:20 

¿Cuál es la solución a este problema? Por mes creo que tengo que añadir 1, ¿verdad?

Estás complicando demasiado el problema. Si todo lo que necesitas es formatear una fecha de cierta manera, entonces usa la clase java.text.SimpleDateFormat . Consulte la documentación aquí: http://developer.android.com/reference/java/text/SimpleDateFormat.html

Si realmente necesita obtener partes individuales, entonces está correcto al utilizar el método Calendar.get . Le sugiero que lea en java.util.Calendar .

  String month=c.get(Calendar.MONTH)+1+""; if(month.length()<2){ month="0"+month; } 
 Date date = calendar.getTime(); SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); String formattedDate = format.format(date); 
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Log.e("TEST",sdf.format(new Date())); 

tl dr

 ZonedDateTime.now( ZonedId.of( "America/Montreal" ) ).format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " ) 

Detalles

¿Cuál es la solución a este problema? Por mes creo que tengo que añadir 1, ¿verdad?

No, no si usas mejores clases. Está utilizando clases problemáticas, confusas, mal diseñadas de fecha y hora que deben evitarse. En su lugar, utilice las clases java.time.

ZonedDateTime

Obtenga el momento actual en la zona horaria deseada / esperada. Obtener un objeto ZonedDateTime .

 ZoneId zoneId = ZonedId.of( "America/Montreal" ); ZonedDateTime zdt = ZonedDateTime.now( zoneId ); 

Interrogate para las partes si eso es lo que usted necesita. Las clases de java.time cuentan el mes sensiblemente, 1-12 es enero-diciembre. Por cierto, echa un vistazo al práctico Month Enum.

 int month = zdt.getMonthValue(); int dayOfMonth = zdt.getDayOfMonth(); 

Para obtener literalmente la cadena mostrada, deje que la clase DateTimeFormatter haga el trabajo. El formateador predefinido DateTimeFormatter.ISO_LOCAL_DATE_TIME le permite llegar casi allí. Usted puede substituir el T en el centro con un ESPACIO para terminar.

 DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_DATE_TIME ; String output = zdt.format( f ).replace( "T" , " " ); 

java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantan las viejas clases problemáticas de fecha y hora, como java.util.Date , .Calendar , y java.text.SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , recomienda la migración a java.time.

Para obtener más información, consulte el Tutorial de Oracle . Y busca Stack Overflow para muchos ejemplos y explicaciones.

Gran parte de la funcionalidad de java.time se retroporta a Java 6 y 7 en ThreeTen-Backport y se adapta más a Android en ThreeTenABP .

El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un terreno probatorio para posibles adiciones futuras a java.time.

  • Descargar un archivo con Android y mostrar el progreso en un ProgressDialog
  • Android MotionEvent Puntero Indice Confusión
  • Firebase sigue lanzando ID de cliente OAuth2 en la configuración del servidor no se encuentra
  • Error "no se pudo obtener wglGetExtensionsStringARB"
  • Firebase android proxy setting
  • Cómo arreglar este código todas las pantallas de Android
  • Handler es abstracto, no se puede instanciar
  • ¿Qué biblioteca de tareas prioritarias de Android (Asynk Task, Multithreading) recomendaría para Android?
  • varias clases en un único archivo físico en android
  • Aprendiendo C / C ++ y Java
  • Cómo abrir la configuración GPS de un dispositivo Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.