当前位置: 首页 > 面试题库 >

使用时区Java将字符串转换为适当的日期

丁翊歌
2023-03-14
问题内容

我的时区有日期,我想将其转换为另一个时区,例如我的日期为“ 2013年3月15日下午3:01:53 PM”,位于时区“ GMT-06:00”。我想在“
GMT-05:00”时区进行转换。我的搜索量很多,对日期的实际工作方式感到困惑。如何将时区应用于日期。我尝试使用SimpleDateFormat,日历和偏移量。

DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aaa XXX");
df.setTimeZone(TimeZone.getTimeZone("GMT")); 
Date dt = null;
try {
    dt = df.parse("3/15/2013 3:01:53 PM -06:00");
} catch (ParseException e) {
    e.printStackTrace();
} 
String newDateString = df.format(dt);
System.out.println(newDateString);

它返回输出 03/15/2013 09:01:53 AM Z。我想应该是 03/15/2013 09:01:53 PM Z,因为时间是在’GMT-06:00’时区,所以在GMT获得时间应该是HH + 6。我想使用“ yyyy-MM-dd
HH:mm:ss”格式的日期,其中HH在24小时内。请帮助我提供示例。提前致谢。

编辑:

我正在使用SimpleDateFormat将字符串转换为日期

DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aaa");
    Date dt = null;
    try {
        dt = df.parse("3/15/2013 3:01:53 PM");
    } catch (ParseException e) {
        e.printStackTrace();
    }

现在,正如您所说,我向“日历”指定了我的日期为“ GMT-06:00”时区并设置了日期,

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-6"));
cal.setTime(dt);

现在,我告诉日历我要在“ GMT”中显示日期

cal.setTimeZone (TimeZone.getTimeZone("GMT"));

System.out.println(cal.getTime());

输出:

Fri Mar 15 03:01:53 CDT 2013

如果我做错了,请知道我。


问题答案:

您需要两个格式的对象,一个用于解析,另一个用于打印,因为您使用两个不同的时区,请参见此处:

// h instead of H  because of AM/PM-format
DateFormat parseFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss aaa XXX"); 
Date dt = null;
try {
  dt = parseFormat.parse("3/15/2013 3:01:53 PM -06:00");
}catch (ParseException e) {
  e.printStackTrace();
}

DateFormat printFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss aaa XXX"); 
printFormat.setTimeZone(TimeZone.getTimeZone("GMT-05")); 
String newDateString = printFormat.format(dt);
System.out.println(newDateString);

输出:2013/3/15下午04:01:53 -05:00

如果您想要HH:mm:ss(24小时格式),则只需替换

hh:mm:ss aaa

通过

HH:mm:ss

在printFormat-pattern中。

评论问题的其他方面:

A
java.util.Date没有内部时区,并且始终按规范引用UTC。您不能在此对象内更改它。格式化字符串可以进行时区转换,但是如我的代码示例所示(您希望转换为GMT-05区域)。

然后,问题切换到新要求,以Date使用UTC时区(符号Z)以ISO格式打印-object。可以通过用“ yyyy-MM-
dd’T’HH:mm:ssXXX”替换模式并将显式的printFormat时区设置为GMT + 00来进行格式化。您应该阐明您真正想要的格式化输出。

关于java.util.GregorianCalendar:在此处设置时区会以编程方式更改日历对象,因此会影响像这样的方法调用calendar.get(Calendar.HOUR_OF_DAY)。但是,这与格式化无关!



 类似资料:
  • 我正在与它的时区约会,我想把它转换成另一个时区,例如。我的日期是“3/15/2013 3:01:53 PM”,它位于时区“GMT-06:00”。我想在'GMT-05:00'时区转换这个。我有很多搜索,我不知道实际约会是如何运作。如何将时区应用到日期。我尝试过SimpleDateFormat、Calender和Offset。 它返回输出。我猜应该是,因为时间在'GMT-06:00'时区,所以应该是H

  • 问题内容: 该java.util.Date 方法显示当地时区的日期。 在几种常见的情况下,我们希望以UTC格式打印数据,包括日志,数据导出以及与外部程序的通信。 在UTC中创建String表示形式的最佳方法是什么? 如何用更好的格式替换无法排序的juDate 格式(感谢@JonSkeet!)? 附录 我认为以自定义格式和时区打印日期的标准方法非常繁琐: 我一直在寻找像这样的单线: 问题答案: 遵循

  • 问题内容: 将日期转换为其他格式的字符串时遇到问题。日期: 我想将此格式转换为另一种格式:。 当我尝试将其转换时,使用以下方法会得到不同的结果: 我得到了错误的结果,该月已替换为分钟: 问题答案: 这是错误的。这应该是。有关将日期从一种格式转换为另一种格式的更多详细信息,请参见此http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDat

  • 我在将日期转换为不同格式的字符串时遇到了问题。日期: 我想将此格式转换为另一种格式:。 当我尝试转换它时,我会得到不同的结果: 我得到了一个错误的结果,月被替换成了分钟:

  • 我有一些日期格式的字符串,例如 我使用SimpleDateForate并尝试将String类型转换为Date类型。它将String类型转换为Date类型,但是Java无法识别时区“MYT”,而是将其设置为计算机的默认时区,即“CST”。我需要在Date对象中记录时区。我该怎么做?

  • 问题内容: 使用BufferedReader时如何将String转换为int?据我记得,它类似于以下内容: 但由于某种原因,它无法正常工作。 错误消息显示: 找不到适合的方法 它也说不适用 问题答案: 一个需要在构造函数中指定。该转弯字节流通向字符流。正如其他人提到的那样,您应该意识到可以从这段代码中引发的异常,例如IOException和NumberFormatException。