Java SimpleDataFormat更改日期,同时将其转换为字符串

Java SimpleDataFormat更改日期,同时将其转换为字符串,java,android,date,Java,Android,Date,在我的应用程序中,我使用SimpleDateFormat将日期对象转换为字符串。但有时,当我逐个更改时区以测试输入的日期是否与转换为字符串的日期相同时,我发现它显示的日期不同。例如,假设我的日期对象中有3月15日00:00:00 GMT+08:00 2012,现在当我使用SimpleDataFormat将其转换为字符串时,它工作正常,但是,当我逐个更改时区并检查转换为字符串的日期是否与存储在date对象中的日期相同时,在某些情况下,它显示为14-Mar-2012,而不是显示15-Mar-2012

在我的应用程序中,我使用
SimpleDateFormat
将日期对象转换为字符串。但有时,当我逐个更改时区以测试输入的日期是否与转换为字符串的日期相同时,我发现它显示的日期不同。例如,假设我的日期对象中有
3月15日00:00:00 GMT+08:00 2012
,现在当我使用SimpleDataFormat将其转换为字符串时,它工作正常,但是,当我逐个更改时区并检查转换为字符串的日期是否与存储在date对象中的日期相同时,在某些情况下,它显示为
14-Mar-2012
,而不是显示
15-Mar-2012
。为什么会这样?谁能告诉我怎么解决这个问题吗

我使用的代码:

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

试试这个,希望对你有帮助

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;
 }

试试这个,希望对你有帮助

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;
 }
例如,假设我的Date对象中有Thu Mar 15 00:00:00 GMT+08:00 2012

您还没有得到它(尽管这无疑是
toString
显示的内容)。
Date
对象不包含时区。它包含时间上的一个瞬间,可以根据您用来解释它的日历和时区将其解释为不同的日期和时间。这是曾经特定时区的午夜,但是
Date
对象本身距离unix纪元只有几毫秒

现在还不清楚您到底在做什么,但是如果更改
SimpleDateFormat
中使用的时区将更改写入的日期,您不应该感到惊讶。如果您能更详细地描述更大的目标是什么,我们可能会为您提供更多帮助。请注意,如果您可以使用,那么这是一个更好的日期/时间API——但我知道它对于Android应用程序来说非常大

例如,假设我的Date对象中有Thu Mar 15 00:00:00 GMT+08:00 2012

您还没有得到它(尽管这无疑是
toString
显示的内容)。
Date
对象不包含时区。它包含时间上的一个瞬间,可以根据您用来解释它的日历和时区将其解释为不同的日期和时间。这是曾经特定时区的午夜,但是
Date
对象本身距离unix纪元只有几毫秒


现在还不清楚您到底在做什么,但是如果更改
SimpleDateFormat
中使用的时区将更改写入的日期,您不应该感到惊讶。如果您能更详细地描述更大的目标是什么,我们可能会为您提供更多帮助。请注意,如果您可以改用,这是一个更好的日期/时间API-但我知道它在Android应用程序中的使用量相当大。

在您的SimpleDateFormat中,提到区域设置

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

地点由您选择。例如,我使用Locale.ENGLISH,因为它包含我需要的日期格式。否则,当您更改设备中的ure语言环境时,simpledateformat将更改为当前语言环境,并最终得到错误的日期。

在simpledateformat中,提及语言环境

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

地点由您选择。例如,我使用Locale.ENGLISH,因为它包含我需要的日期格式。否则,当您更改设备中的ure语言环境时,simpledateformat会更改为当前语言环境,最终您会得到错误的日期。

由于时区不同,日期会随时区而变化……您找到解决此问题的方法了吗?由于时区不同,日期会随时区而变化……您找到解决此问题的方法了吗?