gpt4 book ai didi

java - 如何更改当前日期

转载 作者:行者123 更新时间:2023-12-02 02:23:02 24 4
gpt4 key购买 nike

我的方法接受 - 小时、分钟、秒和毫秒,以符号/分隔作为字符串参数如何将方法的参数添加到当前日期。

示例1:今天,02/10/2021,该方法接收metnode数据(10/10/10/10) - 输出 - 02/10/2021 10:10:10

示例2:今天,02/10/2021,该方法接收metnode数据(55/10/10/10) - 输出 - 02/12/2021 07:10:10也就是说,您需要在当前日期的基础上加上 55 小时 10 秒 10 秒 10 毫秒。

您不能使用 Calendar 和 StringTokenizer 类。

public void method(String s) {

s = s.replaceAll("/", "-");

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");

final LocalDateTime now = LocalDateTime.parse(s, formatter.withResolverStyle(ResolverStyle.LENIENT));

System.out.println(now);
}

我找到了 withResolverStyle (ResolverStyle.LENIENT) 方法但不明白如何使用它。

最佳答案

宽松的DateTimeFormatter就足够了

我不知道这是否是最好的解决方案。这可能取决于口味。它确实使用您提到的 ResolverStyle.LENIENT ,并且通常按照您问题中的代码行工作,只是固定并稍微简化了。

我的格式化程序包括日期和时间。这是将剩余工时转换为天数所必需的。

private static final DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("uuuu-MM-dd H/m/s/")
.appendValue(ChronoField.MILLI_OF_SECOND)
.toFormatter()
.withResolverStyle(ResolverStyle.LENIENT);

接下来我们需要一个与格式化程序匹配的字符串。因此,让我们将日期添加到我们已经获得的时间字符串中:

    String timeString = "55/10/10/10";

LocalDate today = LocalDate.now(ZoneId.of("America/Regina"));
String dateTimeString = "" + today + ' ' + timeString;
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);

System.out.println(dateTime);

今天(2 月 10 日)运行代码时的输出是:

2021-02-12T07:10:10.010

不同的想法:使用Duration

编辑:另一种方法是使用Duration类。这样做的一个原因是,您实际上是在添加持续时间而不是设置一天中的时间。一个缺点是将字符串解析为 Duration 有点棘手。我们要使用的 Duration.parse 方法仅接受 ISO 8601 格式。它的时间类似于 PT55H10M10.010S,时间段为 55 小时 10 分 10.010 秒。是的,毫秒需要以秒的一小部分形式给出。

    String isoTimeString = timeString.replaceFirst("(/)(\\d+)$", "$100$2")
.replaceFirst("(\\d+)/(\\d+)/(\\d+)/0*(\\d{3})", "PT$1H$2M$3.$4S");
Duration dur = Duration.parse(isoTimeString);
LocalDateTime dateTime = LocalDate.now(ZoneId.of("Asia/Kathmandu"))
.atStartOfDay()
.plus(dur);

当我刚刚运行它时(已经是 2 月 11 日在尼泊尔加德满都),输出是:

2021-02-13T07:10:10.010

我使用了两次 replaceFirst() 调用,每次都使用正则表达式。第一个调用只是在毫秒中添加一些前导零。替换字符串中的 $1$2 为我们提供了正则表达式中用圆括号表示的第一个和第二个匹配的内容。

第二个 replaceFirst() 调用建立了 ISO 8601 格式,其中包括确保毫秒恰好是三位数字,以便它们作为秒的小数部分。

链接: ISO 8601

关于java - 如何更改当前日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66134849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com