以yyyy-MM-dd hh.mm.ss格式获取当前日期时间

5

我有一个应用程序,它将始终在唯一的一个时区中运行,所以我不需要担心在不同时区之间进行转换。但是,日期时间必须始终按照以下格式打印:

yyyy-MM-dd hh.mm.ss 

以下代码无法正确打印格式:
public void setCreated(){
    DateTime now = new org.joda.time.DateTime();
    String pattern = "yyyy-MM-dd hh.mm.ss";
    created  = DateTime.parse(now.toString(), DateTimeFormat.forPattern(pattern));
    System.out.println("''''''''''''''''''''''''''' created is: "+created);
}  

setCreated()方法的结果如下所示:
"2013-12-16T20:06:18.672-08:00"

我该如何更改setCreated()中的代码,以便它输出以下内容:
"2013-12-16 20:06:18"

1
你不想要 String pattern = "yyyy-MM-dd hh:mm:ss"; 吗? - Elliott Frisch
5个回答

10
你没有解析任何东西,而是格式化它。你需要使用DateTimeFormatter#print(ReadableInstant)
DateTime now = new org.joda.time.DateTime();
String pattern = "yyyy-MM-dd hh.mm.ss";
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
String formatted = formatter.print(now);
System.out.println(formatted);

打印输出

2013-12-16 11.13.24

这并不符合你的格式,但我是基于你的代码而不是你的预期输出来写的。


谢谢。+1。但是你的代码输出一个字符串。你能告诉我如何让它输出一个日期时间对象吗? - CodeMed
2
@CodeMed 哦,那我相信你有一个误解。DateTimeDate或其他时间对象并没有格式。当你输出它时,你给它一个文本格式。DateTime代表时间线上的一个确切点,但精度仅限于毫秒。 - Sotirios Delimanolis
@CodeMed 它在 toString() 返回值中有一个默认格式,但那只是一个文本表示。日期实例本身只是自 Linux 纪元 以来的秒数/毫秒数。 - Sotirios Delimanolis
谢谢。我只想找一个简单的方法将这个格式输入到MySQL TimeStamp字段中。我在应用程序中被Hibernate和JPA卡住了。你在这里的答案中给出了正确的格式。当这里有一些简单的方法可以将你的正确语法强制输入到数据库中时,我不想花费数小时探索复杂的代码。你有简单的建议吗?请参阅此其他帖子:http://stackoverflow.com/questions/20625105/current-datetime-in-joda-time-date-formatting-for-mysql-timestamp/20625352#20625352 - CodeMed
@CodeMed 当您在控制台上玩耍时看到的MySQL日期格式只是它实际存储的文本表示,实际上它只是一个bigint/long字段(YMMV)。在JDBC级别(与数据库的最低级别接口),Hibernate可能正在使用setDate()。您需要找到joda-hibernate集成,将您的DateTime对象内部转换为Date对象,即这将对您隐藏。 - Sotirios Delimanolis

4
 public static void main(String args[])
{

SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
Date now = new Date();
String strDate = sdfDate.format(now);
    System.out.println(strDate);
}

输出 2013年12月17日 09时48分11秒


2

试试这个

        SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");
        Date now = new Date();
        String strDate = sdfDate.format(now);
        System.out.println(strDate);

演示


1

试试这个:

org.joda.time.DateTime now = new org.joda.time.DateTime();
String pattern = "yyyy-MM-dd hh.mm.ss";
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
String formatted = formatter.print(now);
LocalDateTime date = formatter.parseLocalDateTime(formatted);
System.out.println(date.toDateTime());

感谢您抽出时间为这个老问题提供额外的答案,加一赞! - CodeMed

1
现在在Java 9中,您可以使用以下内容:
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh.mm.ss"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接