martes, 30 de mayo de 2017

ejemplo multimodulo con jacoco

Ejemplo de proyecto maven multimodulo con cobertura de clases entre modulos. En el ejemplo están separados los tests de integración y el código en módulos diferentes.
https://github.com/raulvillalbamedina/sonar-scanning-examples

viernes, 5 de mayo de 2017

PrettyJson en java sin librerias externas

 private static String prettyJson(String responseBody) throws ScriptException {  
     ScriptEngineManager manager = new ScriptEngineManager();  
     ScriptEngine scriptEngine = manager.getEngineByName("JavaScript");  
     scriptEngine.put("jsonString", responseBody);  
     scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)");  
     return (String) scriptEngine.get("result");  
   }  

miércoles, 3 de mayo de 2017

Instalar ubuntu con Wubi

https://github.com/hakuna-m/wubiuefi

SchemaSpy en ubuntu

Hay que tener java8 instalado para poder ejecutar el jar.
Probar el comando java -version en linea de comandos.
Debería salir un mensaje de este estilo:

java version "1.8.xx"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

Si no sale este mensaje seguir un tutorial de este tipo:
https://www.digitalocean.com/community/tutorials/instalar-java-en-ubuntu-con-apt-get-es

Descargas:

Hay que descargar/instalar 3 cosas:

- Schemaspy, el programa:
https://github.com/schemaspy/schemaspy/releases

- Conector a la base de datos (en mi caso mysql):
http://www.java2s.com/Code/JarDownload/mysql/mysql-connector-java-5.1.6-bin.jar.zip
Por defecto busca el jar en /mysql/, así que deberás ponerlo en la raiz.

- Graphviz, sin esto funciona pero no se generan gráficos
http://www.graphviz.org/pub/graphviz/stable/ubuntu/ub13.10/x86_64/graphviz_2.38.0-1~saucy_amd64.deb
Tiene que estar incluido en el path, y poder ejecutarse el comando "dot" desde cualquier lugar


Comandos:

Dependiendo de tu base de datos hay que poner unos parámetros u otros, para saber cuales hay que poner, ejecutar:

java -jar schemaSpy_TU.VERSION.jar -dbhelp

En mi caso me fijo en esto

 mysql:
  MySQL
   -host       hostname[:port] host where database resides with optional port
   -db       database name


Una vez que tienes esto el comando completo sería éste, para mysql:

java -jar schemaSpy_TU.VERSION.jar -t mysql -host localhost -port 3306 -db database_dev -s schema_dev -u user1 -p mypass -o directory




viernes, 31 de marzo de 2017

Tutorial gitlab

https://gist.github.com/m-kyle/fb0f3e9edc369adfcac7

miércoles, 29 de marzo de 2017

arrancar aplicación springboot en segundo plano desde unix

nohup java -jar -Dspring.profiles.active=production example-springboot.jar > /dev/null 2>&1 &

miércoles, 15 de marzo de 2017

Spring data rest, HATEOAS exposeIds

Para que las rests HATEOAS muestren los campos id de cada elemento:

 @Component  
 @Slf4j  
 public class SpringDataRestCustomization extends RepositoryRestConfigurerAdapter {  
   @Override  
   public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {  
     listMatchingClasses(Entity.class).forEach(entity -> config.exposeIdsFor(entity));  
   }  
   public List<Class> listMatchingClasses(Class annotationClass) {  
     List<Class> classes = new LinkedList<Class>();  
     ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(true);  
     scanner.addIncludeFilter(new AnnotationTypeFilter(annotationClass));  
     for (BeanDefinition bd : scanner.findCandidateComponents(Project.class.getPackage().getName())) {  
       try {  
         classes.add(Class.forName(bd.getBeanClassName()));  
       } catch (ClassNotFoundException e) {  
         log.error("listMatchingClasses problem", e);  
       }  
     }  
     return classes;  
   }  
 }  

jueves, 2 de marzo de 2017

Spring4, cors, problema con seguridad

 
Paso 1. Añadir una clase de configuración para corsConfigurer: 
 
 
 @Configuration
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
} 
 
Paso 2. Añadir Clase para seguridad
 
 @EnableWebSecurity
@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**").authorizeRequests().requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
                .anyRequest().fullyAuthenticated().and().httpBasic().and().csrf().disable();
    }
}
 
 
 

martes, 24 de enero de 2017

postgresql dump y restore

 Borrar todo:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;

GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;


Creación de dump:
pg_dump.exe -Uuser database > dump.dump
Restore de dump:
psql -Uuser -e "database" < "dump.dump"


jueves, 10 de noviembre de 2016

scroll To Element con Selenium

Problemática: A veces hay elementos que se encuentran pero no se ejecuta su acción (como el click) cuando utilizo RemoteWebDriver. Una vez estudiado el problema he visto que en ciertos casos extraños si el elemento en cuestión no está en la zona visible del navegador, Selenium encuentra el objeto pero no puede realizar ninguna acción.
Para solucionar/evitar este problema se puede ejecutar javascript que haga scroll hasta el elemento deseado, así siempre será visible y se podrán hacer acciones sobre él.

Este sería el metodo a utilizar:

public static void scrollToElement(WebDriver driver, WebElement element) { JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver; javascriptExecutor.executeScript("arguments[0].scrollIntoView(true);", element); }

miércoles, 26 de octubre de 2016

Tutorial git interactivo

https://try.github.io/levels/1/challenges/9

Ejemplo de uso de JGit para obtener un csv de cambios de release

 package XXXX;  
 import java.io.File;  
 import java.io.IOException;  
 import java.text.ParseException;  
 import java.text.SimpleDateFormat;  
 import java.util.Date;  
 import java.util.Iterator;  
 import org.apache.commons.io.FileUtils;  
 import org.apache.commons.lang3.StringUtils;  
 import org.eclipse.jgit.api.Git;  
 import org.eclipse.jgit.api.errors.GitAPIException;  
 import org.eclipse.jgit.lib.ObjectId;  
 import org.eclipse.jgit.lib.Ref;  
 import org.eclipse.jgit.lib.Repository;  
 import org.eclipse.jgit.revwalk.RevCommit;  
 import org.eclipse.jgit.storage.file.FileRepositoryBuilder;  
 public class ReleaseNotesGenerator {  
   private static ObjectId findActualRefObjectId(Ref ref, Repository repo) {  
     final Ref repoPeeled = repo.peel(ref);  
     if (repoPeeled.getPeeledObjectId() != null) {  
       return repoPeeled.getPeeledObjectId();  
     }  
     return ref.getObjectId();  
   }  
   private static void gitLogFromTagToNow(Repository repository, String tag1, String version, String pathFile)  
       throws IOException, GitAPIException, ParseException {  
     Git git = new Git(repository);  
     Ref refFrom = repository.findRef(tag1);  
     RevCommit latestCommit = git.log().call().iterator().next();  
     Iterable<RevCommit> log = git.log().addRange(findActualRefObjectId(refFrom, repository), latestCommit).call();  
     StringBuilder csvLines = new StringBuilder();  
     csvLines.append(StringUtils.join(new String[] { CABECERAS DE LOS CAMPOS QUE SE QUIERAN AÑADIR }, ";")  
         + "\n");  
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");  
     for (Iterator<RevCommit> iterator = log.iterator(); iterator.hasNext();) {  
       RevCommit rev = iterator.next();  
       String[] splittedMessage = rev.getFullMessage().split("\\r?\\n");  
       if (splittedMessage.length == 6) {  
         cleanMessages(splittedMessage);  
         csvLines.append(StringUtils.join(  
             new String[] { splittedMessage[1], splittedMessage[2], .... CAMPOS OBTENIDOS DE CADA MENSAJE},  
             ";") + "\n");  
       }  
     }  
     FileUtils  
         .writeByteArrayToFile(  
             new File(pathFile + "_" + version + "_"  
                 + new SimpleDateFormat("ddMMyyyy_hhmm").format(new Date()) + ".csv"),  
             csvLines.toString().getBytes());  
     git.close();  
   }  
   private static void cleanMessages(String[] splittedMessage) {  
     for (int i = 0; i < splittedMessage.length; i++) {  
       splittedMessage[i] = splittedMessage[i].replaceAll("\\[.*\\]", "");  
     }  
   }  
   public static void main(String[] args) throws IOException, GitAPIException, ParseException {  
     String version = "versionFromMaven";  
     String fromRevision = "V5.5.0";  
     if (args != null && args.length > 0) {  
       fromRevision = args[0];  
       if (args != null && args.length > 1) {  
         version = args[1];  
       }  
     }  
     System.out.println("fromRevision:" + fromRevision + " version:" + version);  
     FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder();  
     repositoryBuilder.setMustExist(true);  
     File gitBase = new File(".git");  
     String pathFile = "resources/releaseNotes/releaseNotes";  
     if (!gitBase.exists()) {  
       gitBase = new File("../.git");  
       pathFile = "../resources/releaseNotes/releaseNotes";  
     }  
     System.out.println("gitBasePath:" + gitBase.getAbsolutePath());  
     repositoryBuilder.setGitDir(gitBase);  
     Repository repository = repositoryBuilder.build();  
     if (repository.getObjectDatabase().exists()) {  
       gitLogFromTagToNow(repository, fromRevision, version, pathFile);  
     }  
   }  
 }  

martes, 11 de octubre de 2016

Activar chats en grupo en Skype en Linux

Si al instalar Skype no ves tus grupos ejecuta este comando en cualquier conversación.
/msnp24
 
Y cierra y vuelve a abrir skype. 

miércoles, 31 de agosto de 2016

Blog interesante sobre java

http://www.arquitecturajava.com/

Tabla de locales en java7

Esta tabla muestra el language, formate numérico, fecha corta y fecha larga por cada Locale de java.util.Locale.

Se ha generado con este código:

@Test
public void tableWithAllLocalesInfo() {
List list = Arrays.asList(DateFormat.getAvailableLocales());
Date now = new Date();
for (Locale locale : list) {
System.out.println("

Language - " + locale.getLanguage() + "
- Number format - "
+ NumberFormat.getInstance(locale).format(12345.6789) + "
- dateShort - "
+ DateFormat.getDateInstance(DateFormat.SHORT, locale).format(now) + "
- dateLong - "
+ DateFormat.getDateInstance(DateFormat.LONG, locale).format(now) + "
");
}
}


Language - - Number format - 12,345.679- dateShort - 8/31/16- dateLong - August 31, 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 آب, 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 آب, 2016
Language - hr- Number format - 12.345,679- dateShort - 31.08.16.- dateLong - 2016. kolovoza 31
Language - fr- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 août 2016
Language - es- Number format - 12,345.679- dateShort - 08/31/16- dateLong - 31 de agosto de 2016
Language - mt- Number format - 12,345.679- dateShort - 31/08/2016- dateLong - 31 ta’ Awwissu 2016
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - bg- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31 Август 2016
Language - zh- Number format - 12,345.679- dateShort - 2016/8/31- dateLong - 2016年8月31日
Language - it- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 agosto 2016
Language - ko- Number format - 12,345.679- dateShort - 16. 8. 31- dateLong - 2016년 8월 31일 (수)
Language - uk- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31 серпня 2016
Language - lv- Number format - 12 345,679- dateShort - 16.31.8- dateLong - trešdiena, 2016, 31 augusts
Language - da- Number format - 12.345,679- dateShort - 31-08-16- dateLong - 31. august 2016
Language - es- Number format - 12,345.679- dateShort - 08-31-16- dateLong - 31 de agosto de 2016
Language - vi- Number format - 12.345,679- dateShort - 31/08/2016- dateLong - Ngày 31 tháng 8 năm 2016
Language - en- Number format - 12,345.679- dateShort - 8/31/16- dateLong - August 31, 2016
Language - sr- Number format - 12.345,679- dateShort - 31.8.16.- dateLong - 31.08.2016.
Language - sv- Number format - 12 345,679- dateShort - 2016-08-31- dateLong - den 31 augusti 2016
Language - es- Number format - 12.345,679- dateShort - 31-08-16- dateLong - 31 de agosto de 2016
Language - en- Number format - 12,345.679- dateShort - 31/8/16- dateLong - 31 August, 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - pt- Number format - 12.345,679- dateShort - 31-08-2016- dateLong - 31 de Agosto de 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - sk- Number format - 12 345,679- dateShort - 31.8.2016- dateLong - Streda, 2016, augusta 31
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - hi- Number format - १२,३४५.६७९- dateShort - ३१/८/१६- dateLong - ३१ अगस्त, २०१६
Language - ga- Number format - 12,345.679- dateShort - 16/08/31- dateLong - 2016 Lúnasa 31
Language - en- Number format - 12,345.679- dateShort - 31/08/2016- dateLong - 31 August 2016
Language - fi- Number format - 12 345,679- dateShort - 31.8.2016- dateLong - 31. elokuuta 2016
Language - et- Number format - 12 345,679- dateShort - 31.08.16- dateLong - kolmapäev, 31. august 2016. a
Language - sv- Number format - 12 345,679- dateShort - 2016-08-31- dateLong - den 31 augusti 2016
Language - cs- Number format - 12 345,679- dateShort - 31.8.16- dateLong - 31. srpna 2016
Language - sr- Number format - 12,345.679- dateShort - 31.8.16.- dateLong - 31. avgust 2016.
Language - el- Number format - 12.345,679- dateShort - 31/8/2016- dateLong - 31 Αυγούστου 2016
Language - uk- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31 серпня 2016
Language - hu- Number format - 12 345,679- dateShort - 2016.08.31.- dateLong - 2016. augusztus 31.
Language - fr- Number format - 12'345.679- dateShort - 31.08.16- dateLong - 31. août 2016
Language - in- Number format - 12.345,679- dateShort - 16/08/31- dateLong - 2016 Agustus 31
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - ja- Number format - 12,345.679- dateShort - H28.08.31- dateLong - H28.08.31
Language - es- Number format - 12,345.679- dateShort - 08-31-16- dateLong - 31 de agosto de 2016
Language - pt- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de Agosto de 2016
Language - be- Number format - 12 345,679- dateShort - 31.8.16- dateLong - серада, 31, жніўня 2016
Language - is- Number format - 12.345,679- dateShort - 31.8.2016- dateLong - 31. ágúst 2016
Language - cs- Number format - 12 345,68- dateShort - 31.8.16- dateLong - 31. srpna 2016
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - pl- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31 sierpnia 2016
Language - tr- Number format - 12.345,679- dateShort - 31.08.2016- dateLong - 31 Ağustos 2016 Çarşamba
Language - ca- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 / d’agost / 2016
Language - sr- Number format - 12.345,679- dateShort - 31.8.16.- dateLong - 31.08.2016.
Language - ms- Number format - 12,345.679- dateShort - 31/08/2016- dateLong - 31 Ogos 2016
Language - hr- Number format - 12.345,679- dateShort - 2016.08.31- dateLong - 2016. kolovoza 31
Language - lt- Number format - 12 345,679- dateShort - 16.8.31- dateLong - Trečiadienis, 2016, rugpjūtis 31
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - bg- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31 Август 2016
Language - sq- Number format - 12.345,679- dateShort - 16-08-31- dateLong - 2016-08-31
Language - fr- Number format - 12 345,679- dateShort - 31/08/16- dateLong - 31 août 2016
Language - ja- Number format - 12,345.679- dateShort - 16/08/31- dateLong - 2016/08/31
Language - sr- Number format - 12.345,679- dateShort - 16-08-31- dateLong - 31. август 2016.
Language - is- Number format - 12.345,679- dateShort - 31.8.2016- dateLong - 31. ágúst 2016
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - de- Number format - 12.345,679- dateShort - 31.08.16- dateLong - 31. August 2016
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - es- Number format - 12,345.679- dateShort - 8/31/16- dateLong - 31 de agosto de 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - en- Number format - 12,345.679- dateShort - 8/31/16- dateLong - August 31, 2016
Language - ro- Number format - 12.345,679- dateShort - 31.08.2016- dateLong - 31 august 2016
Language - en- Number format - 12,345.679- dateShort - 8/31/16- dateLong - August 31, 2016
Language - ca- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 / d’agost / 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - sr- Number format - 12,345.679- dateShort - 31.8.16.- dateLong - 31.08.2016.
Language - es- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - sl- Number format - 12.345,679- dateShort - 31.8.2016- dateLong - 31. avgust 2016
Language - ko- Number format - 12,345.679- dateShort - 16. 8. 31- dateLong - 2016년 8월 31일 (수)
Language - el- Number format - 12.345,679- dateShort - 31/08/2016- dateLong - 31 Αύγουστος 2016
Language - es- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - ru- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31 августа 2016 г.
Language - es- Number format - 12,345.679- dateShort - 08-31-16- dateLong - 31 de agosto de 2016
Language - zh- Number format - 12,345.679- dateShort - 16年8月31日- dateLong - 2016年08月31日 星期三
Language - no- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31. august 2016
Language - hu- Number format - 12 345,679- dateShort - 2016.08.31.- dateLong - 2016. augusztus 31.
Language - th- Number format - 12,345.679- dateShort - 31/8/2559- dateLong - 31 สิงหาคม 2559
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - es- Number format - 12.345,679- dateShort - 31-08-16- dateLong - 31 de agosto de 2016
Language - fi- Number format - 12 345,679- dateShort - 31.8.2016- dateLong - 31. elokuuta 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - ga- Number format - 12,345.679- dateShort - 31/08/2016- dateLong - 31 Lúnasa 2016
Language - mk- Number format - 12.345,679- dateShort - 31.8.16- dateLong - 31, август 2016
Language - tr- Number format - 12.345,679- dateShort - 31.08.2016- dateLong - 31 Ağustos 2016 Çarşamba
Language - et- Number format - 12 345,679- dateShort - 31.08.16- dateLong - kolmapäev, 31. august 2016. a
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - sr- Number format - 12,345.679- dateShort - 31.8.16.- dateLong - 31. avgust 2016.
Language - pt- Number format - 12.345,679- dateShort - 31-08-2016- dateLong - 31 de Agosto de 2016
Language - fr- Number format - 12 345,679- dateShort - 31/08/16- dateLong - 31 août 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - th- Number format - 12,345.679- dateShort - 31/8/2016- dateLong - 31 สิงหาคม 2016
Language - sq- Number format - 12.345,679- dateShort - 16-08-31- dateLong - 2016-08-31
Language - es- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - ru- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31 августа 2016 г.
Language - en- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 August 2016
Language - sr- Number format - 12.345,679- dateShort - 31.8.16.- dateLong - 31.08.2016.
Language - de- Number format - 12'345.679- dateShort - 31.08.16- dateLong - 31. August 2016
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - ms- Number format - 12,345.679- dateShort - 16/08/31- dateLong - 2016 Ogos 31
Language - el- Number format - 12.345,679- dateShort - 31/8/2016- dateLong - 31 Αυγούστου 2016
Language - iw- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 אוגוסט 2016
Language - en- Number format - 12,345.679- dateShort - 2016/08/31- dateLong - 31 August 2016
Language - th- Number format - ๑๒,๓๔๕.๖๗๙- dateShort - ๓๑/๘/๒๕๕๙- dateLong - ๓๑ สิงหาคม ๒๕๕๙
Language - hi- Number format - 12,345.679- dateShort - 8/31/16- dateLong - August 31, 2016
Language - fr- Number format - 12 345,679- dateShort - 31/08/16- dateLong - 31 août 2016
Language - de- Number format - 12.345,679- dateShort - 31.08.16- dateLong - 31. August 2016
Language - nl- Number format - 12.345,679- dateShort - 31-8-16- dateLong - 31 augustus 2016
Language - no- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31. august 2016
Language - en- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 August 2016
Language - vi- Number format - 12.345,679- dateShort - 31/08/2016- dateLong - Ngày 31 tháng 8 năm 2016
Language - nl- Number format - 12.345,679- dateShort - 31-8-16- dateLong - 31 augustus 2016
Language - fr- Number format - 12 345,679- dateShort - 16-08-31- dateLong - 31 août 2016
Language - lv- Number format - 12 345,679- dateShort - 16.31.8- dateLong - trešdiena, 2016, 31 augusts
Language - de- Number format - 12.345,679- dateShort - 31.08.16- dateLong - 31. August 2016
Language - es- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - sr- Number format - 12.345,679- dateShort - 31.8.16.- dateLong - 31.08.2016.
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - mt- Number format - 12,345.679- dateShort - 31/08/2016- dateLong - 31 ta’ Awwissu 2016
Language - it- Number format - 12'345.679- dateShort - 31.08.16- dateLong - 31. agosto 2016
Language - da- Number format - 12.345,679- dateShort - 31-08-16- dateLong - 31. august 2016
Language - de- Number format - 12.345,679- dateShort - 31.08.16- dateLong - 31. August 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 أغسطس, 2016
Language - sk- Number format - 12 345,679- dateShort - 31.8.2016- dateLong - Streda, 2016, augusta 31
Language - lt- Number format - 12 345,68- dateShort - 16.8.31- dateLong - Trečiadienis, 2016, rugpjūtis 31
Language - it- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 agosto 2016
Language - en- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 August 2016
Language - zh- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 八月 2016
Language - ro- Number format - 12.345,679- dateShort - 31.08.2016- dateLong - 31 august 2016
Language - en- Number format - 12,345.679- dateShort - 31/08/16- dateLong - August 31, 2016
Language - nl- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 augustus 2016
Language - no- Number format - 12 345,679- dateShort - 31.08.16- dateLong - 31. august 2016
Language - pl- Number format - 12 345,679- dateShort - 16-08-31- dateLong - 31 sierpnia 2016
Language - zh- Number format - 12,345.679- dateShort - 16-8-31- dateLong - 2016年8月31日
Language - ja- Number format - 12,345.679- dateShort - 16/08/31- dateLong - 2016/08/31
Language - de- Number format - 12.345,679- dateShort - 31.08.16- dateLong - 31. August 2016
Language - sr- Number format - 12,345.679- dateShort - 31.8.16.- dateLong - 31. avgust 2016.
Language - iw- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 אוגוסט 2016
Language - en- Number format - 12,345.679- dateShort - 31/8/16- dateLong - 31 August, 2016
Language - ar- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 آب, 2016
Language - es- Number format - 12,345.679- dateShort - 08-31-16- dateLong - 31 de agosto de 2016
Language - zh- Number format - 12,345.679- dateShort - 16-8-31- dateLong - 2016年8月31日
Language - mk- Number format - 12.345,679- dateShort - 31.8.16- dateLong - 31, август 2016
Language - be- Number format - 12 345,679- dateShort - 31.8.16- dateLong - серада, 31, жніўня 2016
Language - sl- Number format - 12.345,679- dateShort - 31.8.2016- dateLong - 31. avgust 2016
Language - es- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 de agosto de 2016
Language - in- Number format - 12.345,679- dateShort - 31/08/16- dateLong - 31 Agustus 2016
Language - en- Number format - 12,345.679- dateShort - 31/08/16- dateLong - 31 August 2016