这个问题在这里已有答案:
我试图以当天早上6点的格式获得格式为yyyy-MM-dd HH:mm:ss,但它显示为:Wed Dec 20 06:00:00 CST 2017
这是我的代码:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 06:00:00");
Date date0 = new Date();
String x = dateFormat.format(date0);
try{
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = formatter.parse(x);
}
catch (Exception e){}
java.util.Date
是自Unix Epoch以来毫秒数的容器,它不保持任何类型的内部格式化概念,相反,当你打印它时,它使用Date#toString
,它通常使用当前的Locale
来提供人类可读的表示形式价值。
虽然我确信你可以继续使用Date
来搞定这项工作,但更简单的方法是利用更新的Date / Time API,比如......
LocalDateTime now = LocalDateTime.now();
LocalDateTime then = now.withHour(6).withMinute(0).withSecond(0).withNano(0);
String formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(then);
System.out.println(formatted);
对我来说,打印出2017-12-21 06:00:00
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
LocalDate date0 = LocalDate.now(ZoneId.of("America/Winnipeg"));
String at6Am = date0.atTime(LocalTime.of(6, 0)).format(formatter);
System.out.println(at6Am);
刚刚运行这个打印
2017-12-21 06:00:00
您使用的类Date
和SimpleDateFormat
自Java 1.0以来已经存在了大约20年。事实证明它们的设计很差并且使用起来很麻烦。也许出于这个原因,有很多关于它们的文章,通过搜索网络,你可以很容易地得到这些是你应该使用的类的印象。相反,它们是你应该避免的类。他们用Java 8替代了它,很快就会在4年前推出。
格式化程序用于格式化和解析。您不应该使用格式化程序(甚至更少两个格式化程序)将时间更改为上午6点。
它永远不会在全球各地出现。因此,获取今天的日期是一项取决于时区的操作。我已经在我的代码中明确了时区,因此读者也会意识到这一事实。如果不是美国/温尼伯,请替换您想要的时区。
您正在修改现有软件。如果你有一个老式的Date
对象,首先将它转换为现代的Instant
类型,然后使用现代API进行进一步的操作。例如:
Date date0 = getOldfashionedDateFromLegacyApi();
String at6Am = date0.toInstant()
.atZone(ZoneId.of("America/Winnipeg"))
.with(LocalTime.of(6, 0))
.format(formatter);
我不认为你的问题中的代码有任何问题。你希望你的日期时间格式为2017-12-20 06:00:00,你在第三个代码行的字符串x
中得到了它。对此感到满意并省略其余的代码。
没有在日期时间对象上强加格式的事情(无论我们是否谈论过时的或现代的API)。格式化日期时间意味着将其转换为所需格式的String
。
解析后,您需要将其格式化如下:formatter.format(date)
。所以修改你的代码如下:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 06:00:00");
Date date0 = new Date();
String x = dateFormat.format(date0);
try{
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = formatter.format(formatter.parse(x));
}
catch (Exception e){}