我有一个日期字符串,如下所示: - Fri Oct 31 11:30:58 GMT+05:30 2014
我想将它转换为2014-10-31T6:00:00
,这应该是在添加偏移量之后。我该怎么办?
答案 0 :(得分:1)
我建议您使用 modern date-time API* 执行以下步骤:
+05:30
),请使用使用适用模式创建的 OffsetDateTime
对象将其解析为 DateTimeFormatter
对象。OffsetDateTime
对象转换为带有 OffsetDateTime
的 ZoneOffset.UTC
对象,确保结果在同一时刻。您可以使用 OffsetDateTime#withOffsetSameInstant
来完成。OffsetDateTime#toString
的默认实现会省略秒和秒的分数(如果它们为零)。您可以使用使用适用模式创建的 OffsetDateTime
对象格式化在上一步中获得的 DateTimeFormatter
对象。OffsetDateTime#truncatedTo
。演示:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "Fri Oct 31 11:30:58 GMT+05:30 2014";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("E MMM d H:m:s O u", Locale.ENGLISH);
OffsetDateTime odt = OffsetDateTime.parse(strDateTime, dtfInput);
OffsetDateTime odtUtc = odt.withOffsetSameInstant(ZoneOffset.UTC);
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss", Locale.ENGLISH);
String output = odtUtc.format(dtfOutput);
System.out.println(output);
// In case you want to ignore the seconds
OffsetDateTime odtUtcTruncated = odtUtc.truncatedTo(ChronoUnit.MINUTES);
output = odtUtcTruncated.format(dtfOutput);
System.out.println(output);
}
}
输出:
2014-10-31T06:00:58
2014-10-31T06:00:00
从 modern date-time API 中了解有关 Trail: Date Time* 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。
答案 1 :(得分:0)
这应该可以完成任务,我想。
public static void main(String args[]) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(format.format(new Date()));
}
答案 2 :(得分:0)
首先,您需要一个SimpleDateFormat,其模式与您的输入字符串匹配:"EEE MMM dd HH:mm:ss z yyyy"
。看看:SimpleDateFromat API
SimpleDateFormat in = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
然后您可以解析输入String以获取相应的Date对象,如下所示:
Date date = in.parse("Fri Oct 31 11:30:58 GMT+05:30 2014");
请注意,Date对象没有时区作为其状态的一部分。如果您想以UTC格式打印日期,则需要另一个SimpleDateFormat格式化并在您所需的时区打印日期。
SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
out.setTimeZone(TimeZone.getTimeZone("UTC"));
out.format(date);
public static void main (String[] args) throws java.lang.Exception
{
SimpleDateFormat in = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
out.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = in.parse("Fri Oct 31 11:30:58 GMT+05:30 2014");
System.out.println(out.format(date));
}