JAVA:获取不同时区的时间

JAVA:获取不同时区的时间,java,android,asp.net,Java,Android,Asp.net,我目前正在为我的一个应用程序开发同步模块。我正在根据LastUpdated时间在本地和服务器之间同步记录,LastUpdated时间只不过是一个时间戳。服务器是新加坡的,那么如何在Android应用程序中将时区设置为Singapore 我试过了 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH); sdf.setTimeZone(TimeZone.getTimeZone("V

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

我试过了

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

还是不走运


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

您的
SimpleDateFormat
示例几乎是正确的。我相信你想要新加坡的
SGT
,你需要打电话。您还可以将
时区传递给like


最后,我就是这样解决的

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);
乔达时间 在处理日期时间工作时,应该避免使用java.util.date和java.util.Calendar类,因为它们是出了名的麻烦、混乱和缺陷。取而代之的是使用Android中的库

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

UTC 正如Elliott Frisch所评论的,在服务器端,您应该使用UTC来工作和存储日期时间值。仅当用户在用户界面中期望时才转换为本地分区值

服务器本身应设置为UTC,如果不可能,则设置为冰岛雷克雅未克。但是您的编程永远不应该假设服务器是这样设置的。您的编程应始终指定所需的时区


在StackOverflow中搜索数百个示例并讨论这些要点

我尝试了你的解决方案,结果是
AM\u PM=0,HOUR=2,HOUR\u OF_DAY=2,MINUTE=18
,但我相信新加坡的时间大约是
12:45 PM
。为什么会有差异?时间也可以通过“UTC+8”或谷歌搜索获得。根据这一点,您也可以使用“UCT-8”。但是如果我的时区错了,应该可以找到一个有效的。谢谢,我也试过了,但还是一样的。在服务器端可以做什么?喜欢将其设置为某个公共时区吗?您可以始终在UTC中执行所有操作。感谢您的洞察力。
TimeZone tz = TimeZone.getTimeZone("SGT");
sdf.setTimeZone(tz);
System.out.println(sdf.format(Calendar.getInstance().getTime()));
System.out.println(Calendar.getInstance(tz));
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);