Java服务器和客户端时间

时间:2013-09-13 10:03:13

标签: java timezone

请允许任何机构帮助我,自1周以来我遇到过有关客户端和服务器时间显示问题的时间相关问题。

描述:实际上服务器位于德国,当客户端(例如:india)尝试向他的联系人发送任何消息时,它会显示消息发送时间是服务器时间(意味着德国时间)。但我应该说当地具体时间。我用户发送任何然后我这样显示消息发送时间。

public static String retrieveFullDateFromDateinAMPM ( Date date ) {
    SimpleDateFormat sdf =
        new SimpleDateFormat("dd/MM/yy hh:mm a", Locale.getDefault());
    return sdf.format(date);
}  

在这里,我将日期值发送给我的帮助方法retrieveFullDateFromDateinAMPM(Date date),我将这样的消息发送到网页:return sdf.format(date);。但它显示了服务器所在的时间,但我需要显示特定于语言环境的时间。请帮我。高级谢谢。

5 个答案:

答案 0 :(得分:1)

服务器端解决方案要求服务器代码知道客户端的位置。我假设这些信息将以某种方式提供为iso 2-letter code。 java api要求对于以下解决方案的工作,语言也必须是已知的。我假设它可以从国家代码派生,或者明确地以iso 2-/3-letter code提供。

所以修改后的方法可能是:

public static String retrieveFullDateFromDateinAMPM ( Date date, String lang, String country ) {
    SimpleDateFormat sdf =
        new SimpleDateFormat("dd/MM/yy hh:mm a", Locale ( lang, country ) )
    ;

    return sdf.format(date);
}

有关详细信息,请参阅the java docs

答案 1 :(得分:1)

首先,Date对特定时区一无所知。您需要致电SimpleDateFormat#setTimeZone来设置特定的时区。

考虑以下代码,在IST个实例上设置DateFormat(印度标准时间)时区:

DateFormat sdf = new SimpleDateFormat("dd/MM/yy hh:mm a", Locale.getDefault());
sdf.setTimeZone(TimeZone.getTimeZone("IST"));

// Will print the date-time in the IST timezone  
System.out.println(sdf.format(date));

或者使用系统的current timezone格式化数据:

sdf.setTimeZone( TimeZone.getDefault() );

答案 2 :(得分:0)

将始终发送给客户端是不是更好?

客户端总是有关于UTC的信息,可以将其转换为当地时间吗?

答案 3 :(得分:0)

解析/格式化日期对象时需要设置正确的语言环境。如果在客户端浏览器中正确设置了区域设置,则应该能够使用javax.servlet.ServletRequest.getLocale()方法进行访问。

答案 4 :(得分:0)

实际上我是从客户端完成的。在将服务器时间发送到客户端(html,jsp ....)之后,然后我写了一些像这样的Jquery代码。请将服务器日期转换为.getTime()在你的客户端。(例如new Date()。getTime()== $('#message_creation_time')。val())

  <script type="text/javascript">
    $(document).ready(function(){
    var date = new Date(parseInt($('#message_creation_time').val())); 
    var localeSpecificTime = date.toLocaleTimeString().replace(/:\d+ /, ' ');
    var dateString =   date.toDateString();$('.message_creation_time_display').html(dateString+"&nbsp;&nbsp;"+localeSpecificTime);
  });
</script>