如何在Java中获取当前服务器的时间?我试过了System.currentTimeMills()
,但是它给了客户的时间而不是服务器时间。我希望以毫秒为单位获得“服务器”时间。
请不要关闭此问题。我在网上搜索,但我不明白。所有代码都返回1970
的值。我想要的是例如:当前服务器时间是9/25/2012:10:19AM
,以毫秒为单位。
我也搜索了其他问题,这与其他问题没有重复。
答案 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)
Instant.now().getEpochMilli()
Other Answers使用可怕的日期时间类(Calendar
,Date
),而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() ;
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参阅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());