2012-03-20 87 views
2

实际上,在我的应用程序中,我使用SimpleDateFormat将Date对象转换为字符串。但有时当我逐个更改时区以测试我输入的日期是否与转换为字符串的日期相同时,我发现它显示不同的日期。例如,假设我在Date对象中有Thu Mar 15 00:00:00 GMT + 08:00 2012,现在当我使用SimpleDateFormat将其转换为字符串时,它工作正常,但是当我逐个更改时区并检查是否转换为字符串的日期与存储在Date对象中的日期相同,因此某些情况下显示为2012年3月14日,而不是2012年3月15日。为什么会发生这种情况。任何人都可以请建议我解决这个问题。我已经使用SimpleDateFormat更改日期,同时将其转换为字符串

代码是

SimpleDateFormat m_sdFormatter = new SimpleDateFormat("dd-MMM-yyyy"); 
String selected_date = m_sdFormatter.format(btnSelectedDt.getTime()); 
+0

由于不同时区的日期更改按时区... http://tutorials.jenkov.com/java-date-time/java-util-timezone.html – 2012-03-20 07:02:06

+0

您是否找到解决此问题的解决方案? – portfoliobuilder 2016-10-15 22:52:31

回答

0

试试这个,希望它可以帮助你..

private String getDate(long timeStamp) { 
    DateFormat objFormatter = new SimpleDateFormat("dd-MM-yyyy"); 
    objFormatter.setTimeZone(TimeZone.getDefault()); 

    Calendar objCalendar = Calendar.getInstance(TimeZone.getDefault()); 
    objCalendar.setTimeInMillis(timeStamp * 1000); 
    String result = objFormatter.format(objCalendar.getTime()); 
    objCalendar.clear(); 
    return result; 
} 
+0

谢谢..但我已经试过这段代码..... – AndroidDev 2012-03-20 07:02:07

+0

好吧,让我试着为你找到解决方案.. – Hasmukh 2012-03-20 07:04:14

0

例如,假设我有周四年03月15日00:00:00 GMT + 2012年8月8日在我的Date对象中,

你还没有(即使这是无疑的什么toString显示器)。 A Date对象不包含时区。它包含时间上的即时,根据您用来解释它的日历和时区,它可以解释为不同的日期和时间。所以这是午夜在一次特定时区 - 但Date对象本身只是自unix时代以来的毫秒数。

目前尚不清楚你在做什么,但你应该不会感到惊讶的是,更改SimpleDateFormat中使用的时区会改变写出的日期。如果您可以更详细地描述更大的目标是什么,我们可能会帮助您更多。请注意,如果您可以使用Joda Time来代替,那么这是一个更好的日期/时间API - 但我知道这对于在Android应用程序中使用非常大。

0

在你的SimpleDateFormat,何况现场,

DateFormat objFormatter = new SimpleDateFormat("dd-MM-yyyy", locale); 

其中locale是您的首选。例如,我使用Locale.ENGLISH,因为它包含我需要的日期格式。否则,当您更改设备中的区域设置时,simpledateformat将更改为当前区域设置,并最终得到错误的日期。