2014-10-29 107 views
2

我目前正在为我的一个应用程序开发同步模块。我正在根据LastUpdated时间同步本地和服务器之间的记录,这不过是一个时间戳。服务器是新加坡的,那么如何在我的Android应用程序中设置时区到新加坡?JAVA:获取不同时区的时间

我都试过了,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH); 
sdf.setTimeZone(TimeZone.getTimeZone("VST")); 

,并

Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("Asia/Singapore")); 
System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); 

仍然没有运气。

或者有什么办法可以为本地和服务器设置公共时区?服务器端语言是ASP.Net

+0

可能重复的[如何设置时区的java.util.Date?](http://stackoverflow.com/questions/2891361/how-to-set-time-zone-of-a-java- util-date) – 2014-10-29 07:13:36

回答

3

您的SimpleDateFormat示例几乎是正确的。我相信你需要SGT为新加坡,你需要拨打DateFormat.format(Date)。你也可以通过TimeZoneCalendar.getInstace(TimeZone)

TimeZone tz = TimeZone.getTimeZone("SGT"); 
sdf.setTimeZone(tz); 
System.out.println(sdf.format(Calendar.getInstance().getTime())); 
System.out.println(Calendar.getInstance(tz)); 
+0

我尝试了你的解决方案,并得到了'AM_PM = 0,HOUR = 2,HOUR_OF_DAY = 2,MINUTE = 18'的结果,但我相信新加坡的时间大概是在12:45 PM左右。为什么有区别? – Aniruddha 2014-10-29 04:48:27

+0

[新加坡](http://en.wikipedia.org/wiki/Singapore_Standard_Time)的时间也可以通过“UTC + 8”或谷歌搜索获得。根据此[表](http://docs.oracle.com/cd/B10191_01/calendar.903/b10094/timezone.htm),您也可以使用“UCT-8”。但是如果我有错误的时区,应该有可能找到一个有效的。 – 2014-10-29 04:55:12

+0

谢谢,我也试过,但它仍然是一样的。任何事情都可以在服务器端完成?像将它设置为一些常见的时区? – Aniruddha 2014-10-29 04:57:59

0

最后,这是我如何解决它。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH); 
TimeZone tz = TimeZone.getTimeZone("Asia/Singapore"); 
sdf.setTimeZone(tz); 

java.util.Date date= new java.util.Date(); 
Timestamp local = new Timestamp(date.getTime()); 
String strDate = sdf.format(date); 
System.out.println("Local in String format " + strDate); 
2

乔达时间

在做任何与日期时间工作显著,你应该避免java.util.Date和java.util.Calendar中的类,因为它们是出了名的麻烦,混乱,和有缺陷。而是使用可在Android中工作的Joda-Time库。

ISO 8601

您的字符串输入接近标准ISO 8601格式。只需将空间替换为T即可。然后将结果连同代表该字符串的预期时区的DateTimeZone对象一起传递给DateTime的构造函数。为数百个示例搜索StackOveflow。

UTC

由于埃利奥特·弗里施评论,在服务器端,你应该是工作和存储都在UTC日期时间值。仅当用户在用户界面中预期时才转换为本地分区值。

服务器本身应设置为UTC,否则设置为雷克雅未克冰岛。但是你的编程不应该假定服务器是如此设置的。您的编程应始终指定所需的时区。

搜索StackOverflow以获得数百个示例和讨论这些要点。

+0

谢谢你的洞察力。 – Aniruddha 2014-10-29 08:52:46