如何在Java中获取当前服务器时间?

时间:2012-09-25 14:20:37

标签: java java-ee websphere

如何在Java中获取当前服务器的时间?我试过了System.currentTimeMills(),但是它给了客户的时间而不是服务器时间。我希望以毫秒为单位获得“服务器”时间。

请不要关闭此问题。我在网上搜索,但我不明白。所有代码都返回1970的值。我想要的是例如:当前服务器时间是9/25/2012:10:19AM,以毫秒为单位。

我也搜索了其他问题,这与其他问题没有重复。

7 个答案:

答案 0 :(得分:13)

System.currentTimeMillis()返回自1970年以来的毫秒数。

如果在服务器上运行它,您将获得服务器时间。如果您在客户端上运行它(例如Applet,独立桌面应用程序等),您将获得客户端时间。要在客户端上获取服务器日期,请设置一个调用,将格式化字符串中的服务器时间返回给客户端。

如果您希望以某种方式格式化日期,请首先创建一个Date()对象,然后使用SimpleDateFormat

对其进行格式化
Date d1 = new Date();
SimpleDateFormat df = new SimpleDateFormat("MM/dd/YYYY HH:mm a");
String formattedDate = df.format(d1);

答案 1 :(得分:6)

如果您希望客户端获得服务器的时间,则必须向服务器发出请求,并让服务器在响应中发送回当前时间。

答案 2 :(得分:1)

如果您想以毫秒为单位从服务器端返回客户端当前时间(System.currentTimeMillis()),则需要在格式化/转换值时使用服务器的时区。

答案 3 :(得分:1)

tl; dr

Instant.now().getEpochMilli()

java.time

Other Answers使用可怕的日期时间类(CalendarDate),而Java 8及更高版本中内置的现代 java.time 类取代了这些日期时间类。 / p>

对于Jakarta EE Web应用程序,您正在Web服务器而不是Web浏览器客户端上执行Java。因此,运行代码询问当前时刻将为您提供服务器上的当前时刻。

按UTC捕获当前时刻。

Instant instant = Instant.now() ;

您的大部分工作应在UTC中完成。为了向用户展示,请定位到他们选择的时区。

ZoneId z = ZoneId.of( "Africa/Tunis" ) ; 
ZonedDateTime zdt = instant.atZone( z ) ;

您说:

我想要的是例如:当前服务器时间是9/25/2012:10:19AM以毫秒为单位。

要获取自UTC(1970-01-01T00:00Z)的1970年第一时刻的纪元参考以来的毫秒数,请询问Instant。当心数据丢失,因为Instant的秒数可能包含微秒或纳秒。

long secondsSinceEpoch = Instant.now().getEpochMilli() ;

Table of date-time types in Java, both modern and legacy


关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规范为JSR 310

Joda-Time项目(现在位于maintenance mode中)建议迁移到java.time类。

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

答案 4 :(得分:0)

服务器程序

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);

    }

}

}

答案 5 :(得分:0)

如果要从服务器获取时间戳,可以使用

new Timestamp(new Date().getTime());

答案 6 :(得分:-1)

尝试一下:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM/dd/HH:mm");

    String cureentdate = sdf.format(new java.util.Date());