package socket;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
public class DaytimeClient {
private final static String hostname = "time.nist.gov";
static Date parseDate(String s) throws ParseException {
String[] pieces = s.split(" ");
String datetime = pieces[1] + " " + pieces[2] + " UTC";
DateFormat format = new SimpleDateFormat("yy-MM-dd hh:mm:ss z");
return format.parse(datetime);
}
public static void main(String[] args) {
try (Socket socket = new Socket(hostname, 13);
InputStreamReader reader = new InputStreamReader(
socket.getInputStream(), "ASCII");) {
socket.setSoTimeout(15000);
StringBuilder time = new StringBuilder();
for (int b = reader.read(); b != -1; b = reader.read()) {
time.append((char) b);
}
System.out.println(parseDate(time.toString()));
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
package socket;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
public class Time {
private final static String hostname = "time.nist.gov";
public static void main(String[] args) throws IOException, ParseException {
Date time = Time.getDateFromNetwork();
System.out.println("现在的时间是:" + time);
}
public static Date getDateFromNetwork() throws IOException, ParseException{
long differenceBetweenEpochs = 2208988800L;
try (Socket socket = new Socket(hostname, 37);
InputStream in = socket.getInputStream();) {
socket.setSoTimeout(15000);
long secondsSince1900 = 0;
for (int i = 0; i < 4; i++) {
secondsSince1900 = (secondsSince1900 << 8 | in.read());
}
long secondsSince1970 = secondsSince1900 - differenceBetweenEpochs;
long msSince1970 = secondsSince1970 * 1000;
Date time = new Date(msSince1970);
return time;
}
}
}
