【问题标题】:How to get properly current date and time in Joda-Time?如何在 Joda-Time 中正确获取当前日期和时间?
【发布时间】:2012-12-29 03:47:09
【问题描述】:

如何在 Joda Time 中正确获取实际日期和时间?我的意思是在我的国家的时间。我阅读了官方页面和一些教程——关于语言环境和时区有很多东西,但我发现它很混乱。我没有找到任何示例如何简单地获取它。

我需要它来做两件事:

  1. 要获得当前讨论中的帖子,
  2. 获取当前时间,我将与出生日期“比较”并计算年龄。

当我有 UTC+1(布拉格 - 捷克共和国)时,如何设置当前时间?

【问题讨论】:

  • +1 表示 Java 日期相关问题,不能只用“使用 Joda 时间”来回答。
  • 你看过 joda time API。 Joda Time API link。这将帮助您解决问题。
  • 这也将帮助您对已在 SO 上提出的问题进行排序。 Using Joda time to get current wall time for a given Time Zone
  • @smit 是的,我在问之前都阅读了它们,但它们都没有帮助我,因为我不知道如何设置我可能应该使用的时区,我也不知道如果我应该设置一些夏令时。为什么他们不能只在文档中制作简单的示例“我在这里,几点了?”
  • @user1097772 我明白了。你有什么要求?我的意思是你有特定的日期格式来解决你的问题吗?

标签: java date datetime time jodatime


【解决方案1】:

这是 Joda Time 的伪代码,可能对您有用。

import org.joda.time.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class JodaTimeExample {

    public static void main(String[] sm) {
        DateTimeFormatter dateFormat = DateTimeFormat
                .forPattern("G,C,Y,x,w,e,E,Y,D,M,d,a,K,h,H,k,m,s,S,z,Z");

        String dob = "2002-01-15";
        LocalTime localTime = new LocalTime();
        LocalDate localDate = new LocalDate();
        DateTime dateTime = new DateTime();
        LocalDateTime localDateTime = new LocalDateTime();
        DateTimeZone dateTimeZone = DateTimeZone.getDefault();

        System.out
                .println("dateFormatr : " + dateFormat.print(localDateTime));
        System.out.println("LocalTime : " + localTime.toString());
        System.out.println("localDate : " + localDate.toString());
        System.out.println("dateTime : " + dateTime.toString());
        System.out.println("localDateTime : " + localDateTime.toString());
        System.out.println("DateTimeZone : " + dateTimeZone.toString());
        System.out.println("Year Difference : "
                + Years.yearsBetween(DateTime.parse(dob), dateTime).getYears());
        System.out.println("Month Difference : "
                + Months.monthsBetween(DateTime.parse(dob), dateTime)
                        .getMonths());
    }
}

Link for DateTimeFormat formatter

Joda Time API

我希望这会对你有所帮助。如果您有任何问题,请告诉我。

P.S.:感谢 Sumit Arora 提供的输出。

dateFormatr : AD,20,2016,2016,26,2,Tue,2016,180,6,28,PM,8,8,20,20,25,20,2,‌​, 
LocalTime : 20:25:17.308 
localDate : 2016-06-28 
dateTime : 2016-06-28T20:25:18.872+05:30 
localDateTime : 2016-06-28T20:25:20.260 
DateTimeZone : Asia/Kolkata 
Year Difference : 14 
Month Difference : 173

【讨论】:

  • 嘿伙计,这是一个很棒且非常有用的示例,它解释了它是如何工作的。竖起大拇指,非常感谢:)
  • @ShajeelAfzal:我提供的伪代码是不言自明的,如果您应用正确的 jar 文件,它可以运行。无论如何,我会寻找这个程序(如果它仍然在某个地方)并尝试用输出更新答案。
  • “这里是伪代码”我不认为这个词的意思是你想象的那样。
  • 以上将产生以下输出:dateFormatr : AD,20,2016,2016,26,2,Tue,2016,180,6,28,PM,8,8,20,20,25, 20,2,, LocalTime : 20:25:17.308 localDate : 2016-06-28 dateTime : 2016-06-28T20:25:18.872+05:30 localDateTime : 2016-06-28T20:25:20.260 DateTimeZone : Asia/Kolkata年差:14 月差:173
【解决方案2】:
LocalTime localTime = new LocalTime();
LocalDate localDate = new LocalDate();
DateTime dateTime = new DateTime();
LocalDateTime localDateTime = new LocalDateTime();  

任何这个构造函数都会在您的时区创建日期,其中 您的时区 表示时区 DateTimeZone.getDefault();

您想将当前日期与出生日期进行比较。如何在数据库中保存污垢日期?
如果是 UTC 时区,可以与 UTC TZ 中的 dateTime 进行比较

Years.yearsBetween(dateOfBirth, new DateTime(DateTimeZone.UTC));   

如果它有服务器 TZ 你应该这样做

Years.yearsBetween(dateOfBirth, new DateTime());  

如果它有服务器 TZ 你应该这样做

Years.yearsBetween(dateOfBirth, new DateTime(DateTimeZone.forID("ClientTZ")));  

【讨论】:

  • 感谢您的回复 :-)
  • "如果它有服务器 TZ,你应该这样做" 抱歉,我不明白。什么是服务器 TZ?
  • @NeonWarge 它是客户端-服务器应用程序中服务器的时区
猜你喜欢
  • 2014-03-24
  • 2014-01-04
  • 2020-08-22
  • 2013-03-19
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 2021-01-31
  • 2010-10-03
相关资源
最近更新 更多