需要以UTC时区的日期格式获取当前日期

3
我试图将当前日期转换为“UTC”时区格式。
    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date());
    DateFormat sdf = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    String dat = sdf.format(cal.getTime());
    System.out.println("In string format" + dat);
    System.out.println(("Date After parses " + (Date) sdf.parse(dat)));

以下是操作:
以字符串格式为Mon Apr 11 09:57:12 +0000 2016 解析后的日期为Mon Apr 11 15:27:12 IST 2016
当我尝试将日期(Parse)从字符串转换为日期格式时,我得到的日期是当前日期时间,并且也是IST格式。

1
一个 Date 对象本身没有与之关联的时区... 如果你想以特定的时区打印它,你需要像你所做的那样使用 DateFormat.format()... - Codebender
我刚刚找到了上述问题的解决方案。我们需要更改默认时区。在我的情况下,默认时区是IST,所以我将其从UTC更改为TimeZone.setDefault(TimeZone.getTimeZone("UTC"))。Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); cal.setTime(new Date()); - Vaibs
1
如果你仅为了显示一个Date对象而更改默认时区,那么这样做是错误的...你想要解决的问题是什么?为什么不使用DateFormat输出Date对象? - Codebender
我的数据库在UTC时区,而我的应用程序在IST时区。因此,每小时我都需要从数据库为应用程序生成报告,为此我需要当前时间,它应该是UTC时区格式的。 - Vaibs
@Vaibs 在发帖之前请先搜索 Stack Overflow。你的问题已经被讨论过数百次了。 - Basil Bourque
1个回答

2

请尝试这篇帖子中提到的解决方案。

基本上,他使用设置为“UTC”的时区获取日历实例。

以下是代码:

 TimeZone timeZone = TimeZone.getTimeZone("UTC");
 Calendar calendar = Calendar.getInstance(timeZone);
 calendar.setTime(new Date());
 DateFormat simpleDateFormat = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
 simpleDateFormat.setTimeZone(timeZone);

 System.out.println("Time zone: " + timeZone.getID());
 System.out.println("default time zone: " + TimeZone.getDefault().getID());
 System.out.println();

 System.out.println("UTC:     " + simpleDateFormat.format(calendar.getTime()));
 System.out.println("Default: " + calendar.getTime());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接