title: The Arduino NTP, I want print out data(DD-MM-YYYY)
body: <p>This codes Arduino NTP connections code, want UTC calculation (DD-MM-YYYY)</p>
  
  <p>Support lib and Header : </p>
  
  <pre><code>#include "WiFiEsp.h"
  #include "WiFiEspUdp.h"
  //kor UTC time + 9
  
  // Emulate Serial1 on pins 6/7 if not present
  #ifndef HAVE_HWSERIAL1
  #include "SoftwareSerial.h"
  #include "TimeLib.h"
  SoftwareSerial Serial1(8, 9); // RX, TX
  #endif
  </code></pre>
  
  <p>global variable :</p>
  
  <pre><code>char ssid[] = "xxxxxxx";            // your network SSID (name)
  char pass[] = "xxxxxxx";        // your network password
  int status = WL_IDLE_STATUS;     // the Wifi radio's status
  
  char timeServer[] = "0.asia.pool.ntp.org";  // NTP server
  unsigned int localPort = 2390;        // local port to listen for UDP packets
  
  const int NTP_PACKET_SIZE = 48;  // NTP timestamp is in the first 48 bytes of the message
  const int UDP_TIMEOUT = 2000;    // timeout in miliseconds to wait for an UDP packet to arrive
  
  byte packetBuffer[NTP_PACKET_SIZE]; // buffer to hold incoming and outgoing packets
  
  // A UDP instance to let us send and receive packets over UDP
  WiFiEspUDP Udp;
  </code></pre>
  
  <p>All-codes :</p>
  
  <pre><code>void setup()
  {
    // initialize serial for debugging
    Serial.begin(9600);
    // initialize serial for ESP module
    Serial1.begin(9600);
    // initialize ESP module
    WiFi.init(&amp;Serial1);
  
    // check for the presence of the shield
    if (WiFi.status() == WL_NO_SHIELD) {
      Serial.println("WiFi shield not present");
      // don't continue
      while (true);
    }
  
    // attempt to connect to WiFi network
    while ( status != WL_CONNECTED) {
      Serial.print("Attempting to connect to WPA SSID: ");
      Serial.println(ssid);
      // Connect to WPA/WPA2 network
      status = WiFi.begin(ssid, pass);
    }
    Serial.println("You're connected to the network");
    Udp.begin(localPort);
  }
  
  void loop()
  {
    sendNTPpacket(timeServer); // send an NTP packet to a time server
  
    // wait for a reply for UDP_TIMEOUT miliseconds
    unsigned long startMs = millis();
    while (!Udp.available() &amp;&amp; (millis() - startMs) &lt; UDP_TIMEOUT) {}
  
    Serial.println(Udp.parsePacket());
    if (Udp.parsePacket()) {
      Serial.println("packet received");
      // We've received a packet, read the data from it into the buffer
      Udp.read(packetBuffer, NTP_PACKET_SIZE);
  
      // the timestamp starts at byte 40 of the received packet and is four bytes,
      // or two words, long. First, esxtract the two words:
  
      unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
      unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
      // combine the four bytes (two words) into a long integer
      // this is NTP time (seconds since Jan 1 1900):
      unsigned long secsSince1900 = highWord &lt;&lt; 16 | lowWord;
      Serial.print("Seconds since Jan 1 1900 = ");
      Serial.println(secsSince1900);
  
      // now convert NTP time into everyday time:
      Serial.print("Unix time = ");
      // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
      const unsigned long seventyYears = 2208988800UL;
      // subtract seventy years:
      unsigned long epoch = (secsSince1900 - seventyYears)+32400;
      //    unsigned long epoch = (secsSince1900 - seventyYears);
      // print Unix time:
      Serial.println(epoch);
      // print the hour, minute and second:
      Serial.println("The UTC time is ");       // UTC is the time at Greenwich Meridian (GMT)
      Serial.println((epoch / 31556926)+1970);
      //    Serial.println((epoch / 86400L)%7); 
      //0=Thursday,1=Friday,2=Saturday,3=Sunday,4=Monday,5=Tuesday,6=Wednesday
      Serial.print((epoch  % 86400L) / 3600); // print the hour (86400 equals secs per day)
      Serial.print(':');
      if (((epoch % 3600) / 60) &lt; 10) {
        // In the first 10 minutes of each hour, we'll want a leading '0'
        Serial.print('0');
      }
      Serial.print((epoch  % 3600) / 60); // print the minute (3600 equals secs per minute)
      Serial.print(':');
      if ((epoch % 60) &lt; 10) {
        // In the first 10 seconds of each minute, we'll want a leading '0'
        Serial.print('0');
      }
      Serial.println(epoch % 60); // print the second
  
  
    }
  
    // wait ten seconds before asking for the time again
    delay(1000);
  }
  
  // send an NTP request to the time server at the given address
  void sendNTPpacket(char *ntpSrv)
  {
    // set all bytes in the buffer to 0
    memset(packetBuffer, 0, NTP_PACKET_SIZE);
    // Initialize values needed to form NTP request
    // (see URL above for details on the packets)
  
    packetBuffer[0] = 0b11100011;   // LI, Version, Mode
    packetBuffer[1] = 0;     // Stratum, or type of clock
    packetBuffer[2] = 6;     // Polling Interval
    packetBuffer[3] = 0xEC;  // Peer Clock Precision
    // 8 bytes of zero for Root Delay &amp; Root Dispersion
    packetBuffer[12]  = 49;
    packetBuffer[13]  = 0x4E;
    packetBuffer[14]  = 49;
    packetBuffer[15]  = 52;
  
    // all NTP fields have been given values, now
    // you can send a packet requesting a timestamp:
    Udp.beginPacket(ntpSrv, 123); //NTP requests are to port 123
    Serial.println();
  
    Udp.write(packetBuffer, NTP_PACKET_SIZE);
  
    Udp.endPacket();
  }
  </code></pre>
  
  <p>Serial monitor Prints  :</p>
  
  <pre><code>packet received
  Seconds since Jan 1 1900 = 3699648843
  Unix time = 1490692443
  The UTC time is 
  2017
  9:14:03
  </code></pre>
  
  <p>epoch is UTC value, wants UTC value calculation DD-MM-YYYY.  </p>