java 格式化DateTime,然后使用minusMinutes()方法减去格式化的日期时间进行修改[关闭]

fsi0uk1n  于 5个月前  发布在  Java
关注(0)|答案(2)|浏览(89)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

6天前关闭
Improve this question
我是一个编程新手,正在练习实现Oracle文献。我选择了时间编程,并试图格式化和减去当前时间,然后显示减少的时间。我的代码是

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

class Workingg {
  public static void main(String[] args){

    LocalDateTime datetimeobj = LocalDateTime.now();
    DateTimeFormatter formatobj = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss");

    LocalDateTime newdatetimeobj = datetimeobj.format(formatobj);

    String wasminute = newdatetimeobj.minusMinutes( 2 ).toString();

    System.out.println(wasminute);

  }
}

字符串
请让我知道我做错了什么,什么是正确的格式,然后减去格式化的时间。感谢那些谁回应这一点。

zc0qhyus

zc0qhyus1#

tl;dr

ZonedDateTime
.now()
.minusMinutes( 2 )
.format(
    DateTimeFormatter.ofPattern( "MM-dd-yyyy HH:mm:ss" )
)

字符串
格式化,然后减去格式化时间
你把它弄反了。首先执行日期时间数学运算,然后生成文本。

详情

第一个月
format方法返回文本,一个String对象。然后你尝试将该字符串赋值给一个声明为保存LocalDateTime的变量。**但是LocalDateTime不是String。**所以你的赋值失败,编译器错误告诉你类型不匹配。

日期时间对象不是文本,所以它没有格式。日期时间对象可以生成表示其值的文本;这就是format方法所做的。但该文本不存在于日期时间对象中。

顺便说一句,我无法想象调用LocalDateTime.now是明智的。该类缺少时区或UTC偏移量的上下文。因此该类不能表示时刻,时间轴上的点。通过LocalDateTime跳回两分钟可能会导致某些时区中某些时刻的错误时间。
相反,使用InstantOffsetDateTimeZonedDateTime来表示矩。

ZonedDateTime now = ZonedDateTime.now() ; // Capture the current moment as seen in the JVM’s current default time zone.


减去两分钟。

ZonedDateTime twoMinutesEarlier = now.minusMinutes( 2 ) ;

生成文本

在完成日期-时间数学运算之后,您可以生成文本。
通过调用toString,生成标准ISO 8601格式的文本,明智地扩展以在方括号中附加时区名称。
或者使用DateTimeFormatter生成自定义格式的文本。

rqdpfwrv

rqdpfwrv2#

您已经有一个LocalDateTime对象存储在datetimeobj上,因此只需将minusMinute直接应用于它:

import java.time.LocalDateTime;

class Workingg {
  public static void main(String[] args){
    LocalDateTime datetimeobj = LocalDateTime.now();

    String wasminute = datetimeobj.minusMinutes(2).toString();
    System.out.println(wasminute);
  }
}

字符串
如果你想解析一个String,那么你可以使用DateTimeFormatter

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

class Workingg {
  public static void main(String[] args){
    String stringobj = "12-28-2023 17:41:02";
    DateTimeFormatter formatobj = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss");
    LocalDateTime datetimeobj = LocalDateTime.parse(stringobj, formatobj);

    String wasminute = datetimeobj.minusMinutes(2).toString();
    System.out.println(wasminute);
  }
}


或者如果你想输出更新的LocalDateTime

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

class Workingg {
  public static void main(String[] args){
    LocalDateTime datetimeobj = LocalDateTime.now();
    DateTimeFormatter formatobj = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss");

    String wasminute = datetimeobj.minusMinutes(2).format(formatobj);
    System.out.println(wasminute);
  }
}

相关问题