Search code examples
javaarraysdatedate-formattingdate-conversion

How to convert integer YYYYmmDD into YYYY/mm/DD in java


I am trying to process the data from a weather station. I simply want to process and print (for now) the minimum and maximum temperatures each day starting from 2000/01/01 until today 2019/12/12. The weather station gives me the date in an integer yyyymmdd like 20191212 or 20030317. I store this, alongside the minimum and maximum temperatures in an integer array, of about 21000 rows long... I want the date to be displayed in yyyy/mm/dd, like 2019/12/12 or 2003/03/17. How exactly do I go about doing this?

This is my code

import java.io.*;

public class Main {
    public static void main(String args[]) {
        int rowAmount = 7152;   //the amount of rows in the document
        int[] temperatures = new int[rowAmount*3];  //makes an array 3 times the size of rowAmount, to fit date, min temp and max temp.
        try {   
            BufferedReader br = new BufferedReader(new FileReader("D:\\20002019minmaxtempbilt.txt")); // Makes the filereader

            String fileRead = br.readLine(); // reads first like
            int counter = 0;    //sets a counter
            while (fileRead != null) { // loops until the file ends.
                String[] tokenize = fileRead.split(","); //splits the line in 3 segements, date, min temp and max temp. And stores them in following variables
                int tempDate = Integer.parseInt(tokenize[0]);
                int tempMin = Integer.parseInt(tokenize[1]);
                int tempMax = Integer.parseInt(tokenize[2]);
                //adds the values to the array
                temperatures[counter] = tempDate;
                counter++;
                temperatures[counter] = tempMin;
                counter++;
                temperatures[counter] = tempMax;
            }
            // close file stream
            br.close();
        }
        catch (FileNotFoundException fnfe)
        {
            System.out.println("file not found");
        }

        catch (IOException ioe)
        {
            ioe.printStackTrace();
        }

        // Displays the entire array, formatted by date neatly, hopefully.

        for(int i = 0; i<rowAmount; i =+ 3) {
            int tempDate = temperatures[i];
            int tempMin = temperatures[i+1];
            int tempMax = temperatures[i+2];
            drawLine(tempDate, tempMin, tempMax);
        }


    }

    public static void drawLine(int tempDate, int tempMin, int tempMax) {
        /*This is where I get stuck. I need to convert tempDate from an int yyyymmdd to either
          3 separate integers representing year, month and day; or I need to convert it to a 
          string that can be printed out yyyy/mm/dd.*/

        System.out.printf("");

    }
}

Solution

  • Since your date is a String to start with I see no reason to convert it to an Integer first. Using the more current java.time package you can use one formatter to convert from a String to LocalDate and then another to convert back to a String with the right format,

    DateTimeFormatter inFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
    LocalDate date = LocalDate.parse(tokenize[0], inFormatter);
    
    DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
    String outStr = outFormatter.format(date);
    

    Since DateTimeFormatter is costly to initialise I would recommend you create both of them before the loop you have for reading the file.