Sobre mí
Quién está detrás de Programming Utils, y por qué existe este sitio.
Por qué este sitio
Soy desarrollador y, como muchos desarrolladores, pegaba JSON, timestamps y regex en cualquier herramienta online, llena de anuncios, ventanas emergentes y rastreadores, sin saber nunca dónde acababan mis datos. Así que creé las herramientas que uso a diario, todas en un mismo sitio y como yo las quería: rápidas, limpias y privadas.
Cómo funciona
Todo es gratis y no hace falta registrarse. Lo que escribes solo se usa para calcular el resultado y nunca se guarda. Sin cookies y sin rastreo: los detalles están en la política de privacidad. Cada herramienta hace una sola cosa, e intenta hacerla bien.
Por dentro
Java 25 y Spring Boot en el servidor; HTML, CSS y JavaScript sencillos en el navegador. Sin frameworks y sin scripts de terceros.
Contacto
¿Has encontrado un error, o te falta una herramienta que usas a diario? Escríbeme en X, @hieinji: leo todos los mensajes.
Hash
Calcula el hash criptográfico (digest) de un texto, para checksums, claves de caché o para comparar valores. El texto se codifica en UTF-8.
Base64
Codifica texto en Base64 o decodifica Base64 a texto. Se usa en data URL, autenticación HTTP Basic, JWT y adjuntos de correo.
Codificar / decodificar URL
Codifica texto con percent-encoding para usarlo con seguridad en la query string de una URL, o decodifica un texto codificado a texto legible.
Codificación de formulario (application/x-www-form-urlencoded): los espacios se convierten en +.
Hex
Convierte texto en sus bytes UTF-8 en hexadecimal, o bytes hexadecimales en texto. Útil para inspeccionar codificaciones y datos binarios.
Escapar / desescapar XML
Sustituye los caracteres con significado especial en XML y HTML por entidades, o convierte las entidades de nuevo en caracteres.
Escapa & < > " '. Desescapar también admite referencias numéricas como A y A.
Conversor de mayúsculas
Convierte identificadores entre convenciones de nombres: camelCase, snake_case, kebab-case, CONSTANT_CASE y más.
Convierte mientras escribes. Cada línea se convierte por separado, así que puedes pegar una lista de nombres.
Líneas → Lista
Convierte una columna de valores (uno por línea) en una única lista delimitada, por ejemplo para una cláusula SQL IN o un array.
Split
Divide un texto en partes según un delimitador o una expresión regular y muestra cada parte con su índice.
Substring
Extrae una parte de un texto según la posición de los caracteres, contando desde 0.
Los índices negativos cuentan desde el final: inicio -3 devuelve los últimos 3 caracteres.
Transformar
Aplica una limpieza rápida al texto: ordenar o quitar líneas duplicadas, eliminar espacios o invertirlo.
Estadísticas
Cuenta caracteres, puntos de código Unicode, bytes UTF-8, palabras y líneas. Útil para comprobar límites de longitud de campos y mensajes.
Validador JSON
Comprueba que un texto es JSON válido, muestra exactamente dónde falla y lo formatea o minimiza. Las claves duplicadas se señalan como error.
Tester de regex
Prueba una expresión regular de Java sobre tu texto mientras escribes: las coincidencias se resaltan, con su posición y sus grupos de captura. También puedes probar un reemplazo.
Sintaxis de Java (java.util.regex), la de String.matches, Pattern y Spring. En el reemplazo, $1 o ${name} insertan un grupo.
Resultado del reemplazo
Generador de UUID
Genera identificadores únicos universales (UUID), de uno hasta 100 a la vez.
Los UUID v7 empiezan con una marca de tiempo, así que se ordenan por fecha de creación: una buena opción para claves de base de datos.
Generador de contraseñas
Genera una contraseña aleatoria robusta con un generador criptográficamente seguro. Nunca se guarda en caché.
La contraseña contiene al menos un carácter de cada tipo seleccionado.
Cadena aleatoria
Genera una cadena aleatoria con la longitud y los caracteres elegidos, para tokens, datos de prueba o identificadores.
POJO Java desde CSV
Pega la cabecera de un CSV y obtén un campo Java por columna, con el tipo adivinado. Añade algunas filas de datos debajo de la cabecera y los tipos se toman de los valores.
Valores: true/false/yes/no → Boolean, enteros → BigInteger, decimales → BigDecimal, 2026-01-01 → LocalDate, 2026-01-01 09:30 → LocalDateTime, todo lo demás → String. Se usan tipos wrapper porque una celda vacía significa null; elige tipos primitivos cuando todas las filas tengan valor.
Conversor de timestamp
Convierte un timestamp Unix (epoch) en una fecha legible y al revés. Pega segundos, milisegundos o una fecha como 2026-01-01T09:00:00Z: la unidad se reconoce automáticamente.
Ahora, milisegundos Unix
Cómo funciona
¿Qué es un timestamp Unix? Cuenta los segundos desde el 1 de enero de 1970 a las 00:00 UTC (el "epoch"): es el mismo número en todo el mundo. La zona horaria solo importa al convertirlo en fecha.
¿Segundos o milisegundos? Linux (date +%s), PHP y la mayoría de las bases de datos usan segundos (hoy 10 dígitos). Java (System.currentTimeMillis()) y JavaScript (Date.now()) usan milisegundos (13 dígitos). Los microsegundos tienen 16 dígitos y los nanosegundos 19.
Conviene saber: el tiempo Unix ignora los segundos intercalares, y los sistemas de 32 bits que lo guardan como entero con signo se desbordan el 19 de enero de 2038 a las 03:14:07 UTC (el "problema del año 2038"). Usa valores de 64 bits (long en Java).
Expresión cron
Crea una programación y obtén la expresión cron para crontab de Linux, Spring (Java @Scheduled) y Quartz, con las próximas ejecuciones.
La hora final no se incluye: de 9 a 17 significa que la última ejecución es antes de las 17:00, así que nada se ejecuta por la noche.
Linux tiene 5 campos y no tiene segundos. Spring pone los segundos al principio (6 campos). Quartz también empieza por los segundos, admite un año opcional y exige ? en el día del mes o en el día de la semana. En Spring y Quartz los días se escriben con su nombre (MON-SUN) porque los dos los numeran de forma distinta (en Quartz 1 = domingo).
Comprobar una expresión
Muestra las próximas 5 ejecuciones, o qué falla en la expresión. Las expresiones de Linux siguen la regla de cron: si se indican el día del mes y el día de la semana, basta con que coincida uno de los dos.