- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(DateinString) 将日期字符串转换为 Date。
这里不是转换为 UTC,而是转换为我的本地时区。我通过 DateFormat 的 format 方法显示这个解析的日期来检查它。
所以我必须将其重新格式化回 UTC。现在,当我尝试通过相同的格式方法将此解析的日期显示为 UTC 时区时,它仍然显示在本地时区中。以下是我的代码,用于将解析的日期格式化为 UTC-
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.setTime(alreadyParsedDateTime); //
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(cal.getTime()));
我的示例日期字符串是“2015-12-23T15:00:00-0800”
解析后 --alreadyParsedDateTime.toString()::Thu Dec 24 04:30:00 IST 2015
解析后——System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(alreadyParsedDateTime))::2015-12-24T04:30:00
在上述将解析日期重新格式化为 UTC 之后 --System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(cal.getTime()))::2015-12-24T04:30:00
预期日期格式为::2015-12-23T23:00:00
我不知道为什么格式方法不能按预期方式工作,或者有什么技巧可以做到这一点。请帮忙..
最佳答案
这里有两个不同的主题;解析和格式化。
SimpleDateFormat.parse()
将尝试从提供的日期字符串中解析时区。如果您正在解析的日期字符串不包含显式时区,则将使用 SimpleDateFormat
对象上的“默认”时区。您可以使用 setTimeZone()
方法设置默认时区。请参阅 SimpleDateFormat.parse()
的 API 文档和 DateFormat.setTimeZone()
供引用。
下面的示例显示了使用 setTimeZone()
设置的时区如何影响解析:
String dateString = "2015.12.10 13:58:18";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
sdf1.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date1 = sdf1.parse(dateString);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
sdf2.setTimeZone(TimeZone.getTimeZone("EST"));
Date date2 = sdf2.parse(dateString);
// Shows that the parsing honours time zone -- will print:
// Thu Dec 10 14:58:18 CET 2015 (original date was parsed as GMT)
// Thu Dec 10 19:58:18 CET 2015 (original date was parsed as EST)
System.out.println(date1);
System.out.println(date2);
假设日期已被正确解析,那么您的问题在于格式。您需要为用于格式化的实际 SimpleDateFormat
对象设置时区。我修改了您的代码来执行此操作,它现在将打印您所期望的内容:
Calendar cal = Calendar.getInstance();
cal.setTime(alreadyParsedDateTime);
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
sdf3.setTimeZone(TimeZone.getTimeZone("UTC"));
// Prints: 2015-12-23T23:00:00 for your example date string
System.out.println(sdf3.format(cal.getTime()));
关于java - DateFormat 格式方法不显示特定时区的解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34200372/
我已经从代码隐藏动态生成文本框,一个类“DateTextBox”被设置为所有动态生成的文本框控件。日期选择器控件设置为类,但每个文本控件需要不同的日期格式。如何为每个文本框的 DatePicker 设
我正在开发一个不是我构建的网站,并且有一个页面不断在控制台中给出错误“Uncaught ReferenceError: dateFormat is not Define” 下面是包含错误的 JS(第
我认为这可能是 Android studio 的一个错误,不幸的是它阻止了我继续前进。 我正在使用(并选择!)android.text.format.DateFormat 作为我的 DateForma
我在android上阅读了一些关于格式化日期的帖子,像这样: How do you format date and time in Android? 人们建议使用 android.text.forma
其他类如 SimpleDateFormat 也是如此。Java 有一个 java.text.SimpleDateFormatAndroid 有 android.icu.text.SimpleDateF
我对 SimpleDateFormat 有疑问。 SimpleDateFormat dtfmt=new SimpleDateFormat("dd MMM yyyy hh:mm a", Locale.g
我尝试使用 SimpleDateFormat 解析日期,但遇到了奇怪的行为。 此示例在我的计算机上打印“Sun Jan 01 19:00:32 CET 2012”: import java.text.
上图是日期选择器,我点击确定后,结果如下图所示。 代码如下 public class DatePickerFragment extends DialogFragment implements
我正在尝试解析为“Mar 28,2017 13:00”类型的 Java 日期字符串。 我写了以下代码 DateFormat df = new SimpleDateFormat("MMM
如何将日期格式设置为以下 View 2018 年 10 月 21 日(月份大写)?我可以通过 "%1$TB %1$te, %1$tY" 模式获取它,但我需要通过 SimpleDateFormat 来完
例如: 用户可以输入 01/23/1983 或 1/23/1983 我如何使用 DateFormat 编写两种不同的格式,例如 (MM/DD/YYYY) 和 (M/DD/YYYY) 并将它们与实际日期
我可能忽略了一些东西,但是从字符串解析到日期对我来说无法正常工作。我有字符串:“20110705_060229”,格式为:“YYYYddMM_HHmmss” 这段代码: Date triggermom
我正在尝试使用 DateFormat 类和 格式模式来解析字符串 "20/08/18 13:21:00:428" “dd/MM/yy”“HH:mm:ss:SSS”。时区设置为 BST。 上述返回的日期
这就是我正在做的事情: SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Local
运行以下代码时出现意外输出, DateFormat df = new SimpleDateFormat("YYYY-MM-dd"); Date date = df.parse("2012-06-23"
我正在尝试将时差显示为一个字符串,该字符串遵循 00:00:00(小时:分钟:秒)的形式,并用零填充。我有以下代码: long timeDiff = System.currentTimeMillis(
我在将 json 对象中收到的日期转换为其所需的格式时遇到问题。我从后端获得的日期是 4 月 13 日,星期三,下午 04:06:00。这就是我所做的。 String refreshDateStrin
String selectedDate = "2012-" + createdMonth + "-" + createdDay; SimpleDateFormat dateFormat = new S
我想将 String 转换为 Date。我的代码: String maturityDate = "20150722"; SimpleDateFormat formatter = new
我通过 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(DateinString) 将日期字符串转换为 Date。 这里不是转换为 UTC,而是转换为
我是一名优秀的程序员,十分优秀!