NSDateFormatter " Mes " en 3 letras en lugar de palabra completa


    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd-MM-YYYY HH:mm"];        
    [formatter setTimeZone:[NSTimeZone systemTimeZone]];

Si elijo " MM "obtengo el mes en número:" 09-05-2012 15 :33" Si elijo "MMMM" obtengo el mes en word:"09-May-2012 15: 33"

Lo que quería era el mes en abreviatura de 3 letras.
Por ejemplo:" Enero "sería" Enero "

En este caso May es correcto porque solo tiene 3 letras.

Author: bruno, 2012-05-09

6 answers

Has intentado: [formatter setDateFormat:@"dd-MMM-YYYY HH:mm"]; y luego [formatter stringFromDate:someNSDate];

 50
Author: graver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-09 15:00:04

SI obtienes las dos cosas en el orden incorrecto, no obtienes la salida esperada.

[formatter setDateFormat:@"MMM"];
[formatter setDateStyle:NSDateFormatterMediumStyle];

NO da los mismos resultados que:

[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setDateFormat:@"MMM"];

(El segundo de estos dos fragmentos ahora está felizmente repartiendo Sep Oct, etc. en mi aplicación)

 26
Author: Dan Lingman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-21 16:47:41

In SWIFT

let dateFormatter = NSDateFormatter()

dateFormatter.dateFormat = "dd MMM yyyy HH:mm"

dateFormatter.stringFromDate(NSDate())
 4
Author: hellosheikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-09 10:07:10

Esta es una solución simplificada que funciona con Swift 4 para producir una salida mensual de 3 letras:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM YYYY, HH:mm:ss"

Y para verificar:

print(dateFormatter.string(from: Date())) // 20 Mar 2018, 23:41:40

Como se señaló anteriormente, MMM es la sintaxis correcta para obtener la salida del mes deseado.

 2
Author: CodeBender,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-21 06:43:47

En realidad, puede establecer su estilo de datos en medio (es decir, 'Jan', 'Feb', etc.) de la siguiente manera:

[formatter setDateStyle:NSDateFormatterMediumStyle];
 1
Author: Alladinian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-09 15:03:45

Para swift 4 ir con:

if let dateFormatter = DateFormatter(){
    dateFormatter.dateStyle = .medium
    // eventually:
    //let locale = Locale(identifier: ...                       
    //dateFormatter!.locale = locale
    dateFormatter.dateStyle = .medium
    dateFormatter!.dateFormat = "dd MMM YYYY, HH:mm:ss"
 } else..
        ..
 1
Author: ingconti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 15:35:35