Javaで現在のサーバーの時刻を取得するにはどうすればよいですか?試しSystem.currentTimeMills()
ましたが、サーバーの時間ではなく、クライアントの時間が返されます。「サーバー」の時間をミリ秒単位で取得したい。
ネットで検索しましたが、わかりませんでした。すべてのコードはから値を返します1970
。私が欲しいのは例えば:現在のサーバー時間は9/25/2012:10:19AM
ミリ秒単位です。
System.currentTimeMillis()
1970年からのミリ秒数を返します。
サーバー上で実行すると、サーバー時間が取得されます。クライアント(アプレット、スタンドアロンデスクトップアプリなど)で実行すると、クライアントの時間が取得されます。クライアントでサーバーの日付を取得するには、フォーマットされた文字列でサーバーの時刻をクライアントに返す呼び出しを設定します。
日付を特定の方法でフォーマットする場合は、最初にDate()
オブジェクトを作成してから、を使用してフォーマットします。SimpleDateFormat
Date d1 = new Date();
SimpleDateFormat df = new SimpleDateFormat("MM/dd/YYYY HH:mm a");
String formattedDate = df.format(d1);
クライアントにサーバーの時刻を取得させたい場合は、サーバーに要求を行い、サーバーに応答で現在の時刻を返送させる必要があります。
サーバー側から現在の時刻()をミリ秒単位でクライアントに返す場合はSystem.currentTimeMillis()
、値をフォーマット/変換するときにサーバーのタイムゾーンを使用する必要があります。
Java 8以降でLocalTime localTime = LocalTime.now();
は、現在のシステム時刻を取得するために使用できます。
また、サーバーのタイムゾーンがわかっている場合は、次を使用できます。
LocalTime localTime = LocalTime.now(ZoneId.of("GMT-06:00"));
"GMT-06:00"
これは、GMTからのオフセットとして表されるサーバーのタイムゾーンを表します。"Europe/London"
などのゾーン名も使用できます。Java™Platform、Standard Edition 8 API仕様では、詳細を確認できます。
ただし、タイムゾーンアプローチを使用すると、サーバーのタイムゾーンでクライアントの時間がのみ表現されることに注意してください。クライアントとサーバーのクロックが適切に同期されていない場合、サーバーに表示されている時間に近い時間は得られません。ただし、 NTPクライアントを使用して時刻が適切に同期されていて、サーバーがレポートしている正確な時刻が必要ない場合(たとえば、プレゼンテーションのみ)、このメソッドはサーバー呼び出しを排除します。
サーバープログラム
import java.io.*;
import java.net.*;
import java.util.*;
class dateserver
{
public static void main(String args[])
{
ServerSocket ss;
Socket s;
PrintStream ps;
DataInputStream dis;
String inet;
try
{
ss=new ServerSocket(8020);
while(true)
{
s=ss.accept();
ps=new PrintStream(s.getOutputStream());
Date d=new Date();
ps.println(d);
ps.close();
}
}
catch(IOException e)
{
System.out.println("The exception is: "+e);
} } }
クライアントプログラム
import java.io.*;
import java.net.*;
class dateclient
{
public static void main(String args[])
{
Socket soc;
DataInputStream dis;
String sdate;
PrintStream ps;
try
{
InetAddress ia=InetAddress.getLocalHost();
soc=new Socket(ia,8020);
dis=new DataInputStream(soc.getInputStream());
sdate=dis.readLine();
System.out.println("The data in the server is: "+sdate);
}
catch(IOException e)
{
System.out.println("The exception is: "+e);
}
}
}
これを試してください:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM/dd/HH:mm");
String cureentdate = sdf.format(new java.util.Date());
サーバーからタイムスタンプを取得したい場合は、
new Timestamp(new Date().getTime());