String.Format

Toda aplicación que maneje datos tiene que formatearlos. La clase String dispone del método Format que nos permite formatear una expresión de entrada.

No sé vosotros, pero yo siempre olvido los formatos y como obtener los resultados de una u otra forma. Navengando por ahí encontre un sitio que mostraba de forma bastante clara los diferentes formatos (http://idunno.org/archive/2004/14/01/122.aspx)

Lo que aqui vamos a hacer es ampliar un poco la información que se muestra en dicha página e incluir algunos ejemplos.

example output
String.Format("--{0,10}--", "test"); --      test--
String.Format("--{0,-10}--", "test"); --test      --

 

/*

* Rellena con espacios en blanco por la izquierda

* hasta diez posiciones

*/

Console.WriteLine("{0,10} {1}", "Vaya", "Mundo");

 

/*

* Rellena con espacios en blanco por la derecha

* hasta diez posiciones

*/

Console.WriteLine("{0,-10} {1}", "Vaya", "Mundo");

Formatos estandar de números

Cuando utilizamos los formatos estandar para foramtear números o fechas, lo que estamos haciendo es emplear la configuración que hayamos definido en el panel de control. Es importante tener en cuenta que esta configuración se lee del equipo que ejecuta la aplicacion, no del que la visualiza - por ejemplo, una aplicación web tomará los valores del servidor no del cliente que accede a la página.


[Ampliar Imagen]


[Ampliar Imagen]

Una vez que sabemos a que nos referimos con formatos estandar, podemos entender la siguiente tabla , que muestra los identificadores de formatos estandar. 

specifier type format output
(double 1.2345)
output
(int -12345)
c currency {0:c} €1.23 -€12,345.00
d decimal
(whole number)
{0:d} System.FormatException -12345
e exponent / scientific {0:e} 1.234500e+000 -1.234500e+004
f fixed point {0:f} 1.23 -12345.00
g general {0:g} 1.2345 -12345
n number {0:n} 1.23 -12,345.00
r round trippable {0:r} 1.23 System.FormatException
x hexadecimal {0:x4} System.FormatException ffffcfc7

El siguiente ejemplo muestra como formatear un valor numérico con el especificador "c", de currency (moneda).

 

/*

* Devuelve el formato moneda configurado en el panel de control

*/

 

string resultado = String.Format("{0:c}", 100.123);

Console.WriteLine(resultado);

Podemos especificar que se aplique la configuración de una cultura especifica en lugar de la definida en el panel de control a través de la clase CultureInfo.

 

/*

* En este ejemplo se formatea  el valor 20 con el formato de

* moneda de gran bretaña, es decir, mostrar  la libra como

* simbolo de moneda

* */

CultureInfo ingles = new CultureInfo("en-GB");

string dato = String.Format(ingles,"Valor:{0:c}", 20);

Console.WriteLine(dato);

Formato personalizado de números. 

También podemos forzar el formato de forma manual, independientemente del formato definido en el sistema.

specifier type format output
(double 1234.56)
0 zero placeholder {0:00.000} 1234.560
# digit placeholder {0:#.##} 1234.56
. decimal point placeholder {0:0.0} 1234.6
, thousand separator {0:0,0} 1,235
% percentage {0:0%} 123456%

El siguiente ejemplo muestra como especificar manualmente el formato.

 

/*

* Devuelve el número formateado con 4 ceros en la parte decimal

*/

 

string resultado = String.Format("{0:0.0000}", 100.123);

Console.WriteLine(resultado);

Por supuesto podemos formatear más de un valor.

 

/*

* Devuelve el primer número formateado con 4 ceros en la parte
* decimal y el segundo con dos.

*/

 

string resultado = String.Format("{0:0.0000} - {1:0.00}",

100.123, 85.125);

Console.WriteLine(resultado);

Formato estandar de fechas

También podemos formatear fechas del mismo modo, en este caso los formatos estandar y personalizados cambian, pero representan el mismo concepto explicado anteriormente. 

specifier type output
(June 8, 1970 12:30:59)
d Short Date 08/06/1970
D Long Date 08 June 1970
t Short Time 12:30
T Long Time 12:30:59
f Full date and time 08 June 1970 12:30
F Full date and time (long) 08 June 1970 12:30:59
g Default date and time 08/06/1970 12:30
G Default date and time (long) 08/06/1970 12:30:59
M Day / Month 8 June
r RFC1123 date string Mon, 08 Jun 1970 12:30:59 GMT
s Sortable date/time 1970-06-08T12:30:59
u Universal time, local timezone 1970-06-08 12:30:59Z
Y Month / Year June 1970

El siguiente ejemplo muestra como formatear la fecha de hoy con formato de fecha larga completa, "F".

 

/*

* Devuelve la fecha formateada en formato largo según la

* configuración del panel de control

*/

 

string resultado = String.Format("Hoy es {0:F}", DateTime.Now);

Console.WriteLine(resultado);

Formato personalizado de fechas 

Del mismo modo podemos personalizar el formato de las fechas. La siguiente tabla muestra los distintos formatos disponibles.

specifier type output
(June 8, 1970 12:30:59)
dd Day 08
ddd Short Day Name Mon
dddd Full Day Name Monday
hh 2 digit hour 12
HH 2 digit hour (24 hour) 12
mm 2 digit minute 30
MM Month 06
MMM Short Month name Jun
MMMM Month name June
ss seconds 59
tt AM/PM PM
yy 2 digit year 70
yyyy 4 digit year 1970
: seperator, e.g. {0:hh:mm:ss} 12:30:59
/ seperator, e.g. {0:dd/MM/yyyy} 08/06/1970

El siguiente ejemplo muestra aplicar un formato personalizado a un fecha.

 

/*

* Devuelve la fecha formateada en formato personalizado

*/

 

string resultado = String.Format("Hoy es {0:dddd} {0:dd/MM/yyy}",

DateTime.Now);

Console.WriteLine(resultado);

Saludos, DJK

Pedro  Herrarte  Sánchez
String.Format
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:13/04/2008
Última actualizacion:13/04/2008
Visitas totales:73416
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com