Java 获取设备';s本地时区
2010-06-14 02:21:49+0400或2010-06-14 02:21:49-0400 是否有方法将此字符串转换为根据本地机器时区的日期,格式为2010-06-14 02:21 AMJava 获取设备';s本地时区,java,android,timezone,Java,Android,Timezone,2010-06-14 02:21:49+0400或2010-06-14 02:21:49-0400 是否有方法将此字符串转换为根据本地机器时区的日期,格式为2010-06-14 02:21 AM 注意:我不确定同一个类在andriod中是否可用。您可以使用DateFormat类对日期进行各种奇特的格式化和本地化。API页面的开头有非常好的完整文档: 大多数常规情况都可以使用内置的SimpleDataFormat对象处理。详情如下: 上面示例的SimpleDataFormat输出模式字符串为:
注意:我不确定同一个类在andriod中是否可用。您可以使用DateFormat类对日期进行各种奇特的格式化和本地化。API页面的开头有非常好的完整文档: 大多数常规情况都可以使用内置的SimpleDataFormat对象处理。详情如下: 上面示例的SimpleDataFormat输出模式字符串为:
yyyy-MM-dd hh:mm a
除了@org.life.java和@Erica所说的,下面是您应该做的
String dateStr = "2010-06-14 02:21:49-0400";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
TimeZone tz = TimeZone.getDefault();
sdf.setTimeZone(tz);
Date date = sdf.parse(dateStr);
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
String newDateStr = sdf.format(date);
System.out.println(newDateStr);
然后,newDateStr
将成为新的日期格式字符串
更新@xydev,我给你的示例很有用,请参阅下面的完整源代码:
/**
*
*/
package testcases;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
/**
* @author The Elite Gentleman
*
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String dateStr = "2010-06-14 02:21:49-0400";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
TimeZone tz = TimeZone.getDefault();
sdf.setTimeZone(tz);
Date date = sdf.parse(dateStr);
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
String newDateStr = sdf.format(date);
System.out.println(newDateStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出:
2010-06-14 08:21:49 AM
请注意,如果您在模拟器上运行,您的时区总是GMT。我花了两个小时试图理解为什么我的应用程序没有给我正确的时间(计算机显示的时间),直到我意识到这是因为模拟器
要检查您是否在模拟器上运行,请使用
if (Build.PRODUCT.contains("sdk")){
// your code here for example if curtime has the emulator time
// since midnight in milliseconds then
curtime += 2 * 60 * 60 * 1000; // to add 2 hours from GMT
}
回答得好。不过,您可能需要将当月的“mm”大写,否则您将得到分钟的时间。:)Android基于Java 1.5,因此该类是存在的。在您的模式中,
ss
和Z
之间必须没有空格。@精英绅士当然它是时区的对象,它持有默认时区,可以通过TimeZone tz=TimeZone.getDefault()检索代码>可能重复我最近回答的问题。@Elite先生们,是的,这是xydev请求的输出字符串的格式;“2010-06-14 02:21上午”:我得到的是“日期日期”周一6月14日11:51:49 GMT+00:00 2010的值。。。。并且应用程序在到达步骤“String newDateStr=sdf.format(date);”时崩溃,谢谢。。我得到了它。。。此代码导致错误//字符串dateStr=“2010-06-14 02:21:49-0400”//SimpleDataFormat sdf=新的SimpleDataFormat(“yyyy-MM-dd-HH:MM:ssZ”)//时区tz=TimeZone.getDefault()//设置时区(tz)//日期=“2010-06-14 02:21:49-0400”////尝试{//dates=sdf.parse(date);//}catch(ParseException e){///TODO自动生成的catch块//e.printStackTrace();//}
if (Build.PRODUCT.contains("sdk")){
// your code here for example if curtime has the emulator time
// since midnight in milliseconds then
curtime += 2 * 60 * 60 * 1000; // to add 2 hours from GMT
}