相关疑难解决方法(0)

如何转换UTC日期字符串并删除Java中的T和Z?

我正在使用Java 1.7。

尝试转换:

2018-05-23T23:18:31.000Z 
Run Code Online (Sandbox Code Playgroud)

进入

2018-05-23 23:18:31
Run Code Online (Sandbox Code Playgroud)

DateUtils类:

public class DateUtils {

    public static String convertToNewFormat(String dateStr) throws ParseException {
        TimeZone utc = TimeZone.getTimeZone("UTC");
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        sdf.setTimeZone(utc);
        Date convertedDate = sdf.parse(dateStr);
        return convertedDate.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试使用它时:

String convertedDate = DateUtils.convertToNewFormat("2018-05-23T23:18:31.000Z");
System.out.println(convertedDate);
Run Code Online (Sandbox Code Playgroud)

得到以下异常:

Exception in thread "main" java.text.ParseException: Unparseable date: "2018-05-23T23:22:16.000Z"
   at java.text.DateFormat.parse(DateFormat.java:366)
   at com.myapp.utils.DateUtils.convertToNewFormat(DateUtils.java:7)
Run Code Online (Sandbox Code Playgroud)

我可能做错了什么?

有没有更简单的方法(例如Apache Commons lib)?

java utc parseexception java-7 datetime-parsing

4
推荐指数
3
解决办法
1万
查看次数

SimpleDateFormat 显示错误的本地时间

我想将一个包含当前时间和日期的字符串存储到 Android 应用程序的数据库(SQLite)中。为此,我使用 SimpleDateFormat。不幸的是它没有显示正确的时间。我尝试了两种选择。

第一个选项(来自SimpleDateFormat 和 TimeZone

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.getDefault());
        sdf.format(new Date());
Run Code Online (Sandbox Code Playgroud)

第二个选项(来自Java SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") 给出时区为 IST

    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'Z'");
    sdf2.setTimeZone(TimeZone.getTimeZone("CEST"));
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,时间都是错误的。我的笔记本电脑或手机显示的不是当地时间,但输出时间早了 2 小时。我怎样才能改变这一点?我希望我的计算机上也显示柏林的当前时间(CEST)。我很欣赏每一条评论。

java android simpledateformat

4
推荐指数
1
解决办法
3016
查看次数

如何将ISO 8601日期时间字符串转换为java.util.LocalDateTime?

我正在从Wikidata读取数据。它们代表使用ISO 8601规范的时间点属性P585。但是,相同的生物带有+。

如果我使用的是Joda,那么将String转换为joda dateTime将会非常简单。

new DateTime(dateTime, DateTimeZone.UTC);
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,LocalDateTime.parse("+2017-02-26T00:00:00Z")我收到一条错误消息,提示无法解析索引0处的字符。在Java 8中是否有此原因。Joda可以很轻松地做到这一点而没有任何错误。

我也试过,LocalDateTime.parse("+2017-02-26T00:00:00Z", DateTimeFormatter.ISO_DATE_TIME)但徒劳。

我们如何绕过加号而不必通过字符串操作将其删除?

java datetime java-8

3
推荐指数
2
解决办法
4237
查看次数

在Java中将字符串转换为OffsetDateTime

我正在尝试转换字符串,OffsetDateTime但低于错误.

java.time.format.DateTimeParseException: Text '20150101' could not be parsed: Unable to obtain OffsetDateTime from TemporalAccessor: {},ISO resolved to 2015-01-01 of type java.time.format.Parsed

代码: OffsetDateTime.parse("20150101", DateTimeFormatter.ofPattern("yyyyMMdd"));

预期产量: OffsetDateTime object with date 20150101.

我非常感谢您提供的任何帮助.

谢谢,

java string datetime date java-8

3
推荐指数
2
解决办法
2万
查看次数

这个日期“2021-08-03T04:10:07.502-0700”是什么日期格式?

我遇到了时区为的日期格式,GMT但我不明白上述日期中微秒后的连字符部分是什么,以及解析两种方式的格式是什么?

因此,对于这个日期(不带连字符):,"2021-08-03T04:10:07.502"格式为YYYY-MM-dd'T'HH:mm:ss.SS

Q1:对于这个日期(带连字符):"2021-08-03T04:10:07.502-0700",格式为: ??

Q2:连字符是时区的一部分GMT吗?

Q3:如果日期是微秒后的连字符形式,如何添加X位数来寻址?

预期的Java代码:

String dateFormatWithHyphen = "?"; // replace ? with that format
DateFormat dateFormat = new SimpleDateFormat(dateFormatWithHyphen);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormat;
Run Code Online (Sandbox Code Playgroud)

java datetime date

1
推荐指数
1
解决办法
430
查看次数

为什么Java的java.time.format.DateTimeFormatter#format(LocalDateTime)增加一年?

这是代码:

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(1451438792953L), ZoneId.of("UTC"));
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
String output = dateTimeFormatter.format(localDateTime);
Run Code Online (Sandbox Code Playgroud)

这是值localDateTime

2015-12-30T01:26:32.953
Run Code Online (Sandbox Code Playgroud)

这是值output

2016-12-30T01:26:32.953Z
Run Code Online (Sandbox Code Playgroud)

为什么要增加一年?

其中java.time.temporal.WeekFields有几种方法,有时会newYearWeek增加年数1。为什么?

这是一个奇怪的错误。

java time localization utc

0
推荐指数
1
解决办法
167
查看次数

Convert "2020-10-31T00:00:00Z" String Date to long

我的输入日期为"2020-10-31T00:00:00Z"。我想解析这个日期以获得长毫秒。 注意:转换后的毫秒数应为悉尼时间(即 GMT+11)。

供参考,

public static long RegoExpiryDateFormatter(String regoExpiryDate)
    {
        long epoch = 0;

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        df.setTimeZone(TimeZone.getTimeZone("GMT+11"));
        Date date;
        try {
            date = df.parse(regoExpiryDate);
            epoch = date.getTime();
        } catch (ParseException e) {
            System.out.println("Exception is:" + e.getMessage());
            e.printStackTrace();
        }

        System.out.println("Converted regoExpiryDate Timestamp*************** " + epoch);
        return epoch;
    }
Run Code Online (Sandbox Code Playgroud)

输出: 1604062800000使用Epoch Converter将日期设为30/10/2019,但在输入中我将第 31 天作为日期传递。任何人都可以澄清这一点吗?

java epoch simpledateformat

0
推荐指数
1
解决办法
1万
查看次数