相关疑难解决方法(0)

比较不同时区的两个日期对象并获取精确的时间差(以秒为单位)

我正在尝试将电子邮件(日期对象)的接收日期与 JSONObject 中的日期(字符串)进行比较。这两个日期将属于不同时区,相差 1 小时。

我的情况是,我必须在几秒钟内获得它们之间的确切差异,如果差异为 +/- 10 秒,我就会找到匹配项。为此,我决定将两者都转换为“UTC”,然后进行区别。这是我的代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

String MsgDtStr = sdf.format(messagesToBeProcessed.getReceivedDate()); 

Date MsgDt = sdf.parse(MsgDtStr);

Date ObjDt = sdf.parse((JsonObj.get("date").toString()));

int DiffInSecs = (int) (ObjDt.getTime() - MsgDt.getTime()) / 1000 % 60;

if (DiffInSecs >= -10 && DiffInSecs <= 10) {
                System.out.println("Found a match!");
                MatchedList.add(i);
}
Run Code Online (Sandbox Code Playgroud)

这似乎给了我正确的结果。应该与 json 对象匹配的邮件匹配。即差异为 +/- 10 秒。但是,当我尝试打印日期并DiffInSecs在上述逻辑之后,我得到如下值:

date in object: 2017-06-22 19:47:25
date in message: 2017-06-22 23:47:30
DiffInSecs: -5

        ........

date in object: 2017-06-22 17:50:38
date …
Run Code Online (Sandbox Code Playgroud)

java timezone date date-difference

5
推荐指数
1
解决办法
1万
查看次数

为什么我无法解析这个日期格式 yyyy-MM-dd'T'HH:mm:ss.SSSZ?

我正在尝试将字符串 date 解析为 date 。我的字符串日期是:2021-12-16T11:00:00.000Z。

我有以下代码将其解析为日期对象:

val stringDate = "2021-12-16T16:42:00.000Z"
val sdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
var consultationDate = sdf.parse(stringDate)
Run Code Online (Sandbox Code Playgroud)

我不断收到此错误:

java.text.ParseException: Unparseable date: "2021-12-16T11:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)

android date date-parsing kotlin

5
推荐指数
2
解决办法
3万
查看次数

处理java/android和夏令时中的日期/时间

我正在为Android制作日记应用程序,我想让用户选择他们所在的时区.时间一直是我编程的混乱区域.

我将为可用的时区创建一个枚举.

我将以longUTC格式将日期/时间条目保存到sqlite ,然后以Java编程方式处理偏移量和DST以用于显示目的.

我实际上意识到Java在日期/时间处理方面的局限性.

Calendar utc = Calendar.getInstance(TimeZone.getTimeZone("UTC")); //returns the current time in UTC format
Long utcLong = utc.getTimeInMillis(); //returns current utc time in long for database insertion
Run Code Online (Sandbox Code Playgroud)

问题1:我如何应用偏移量并说明何时应用任何额外的DST偏移量?因为并非所有时区都观察到DST,并且DST在不同时区对不同时区生效.

问题2:Java的TimeZone类有大约800个ID,用户必须滚动~800个选项才能找到适用于它们的选项.有短名单吗?我在想大约有50个有用的时区.

java datetime android date

4
推荐指数
1
解决办法
1621
查看次数

是否有Oracle的官方文档说我们不应该在新项目中使用java.util.Date

我正在公司的Java 8中编写新项目.我建议使用Java 8日期时间API,但我的一位同事说新的日期时间API运行缓慢.

这是真的吗?另外,我想从Oracle获得一些官方文档,其中提到您不应该java.util.Date在新项目中使用.

java jsr310 java-time

4
推荐指数
2
解决办法
141
查看次数

Java - SimpleDateFormat 格式化程序以毫秒为单位返回纪元时间

我对 Java 和一般编码非常陌生 - 我有一些代码以以下格式返回时间戳,如下yyyy.MM.dd HH:mm:ss:ms所示:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:sss");
Run Code Online (Sandbox Code Playgroud)

这将返回:

2017.07.19 11:42:30:423
Run Code Online (Sandbox Code Playgroud)

有没有办法编辑上面的“SimpleDateFormat 格式化程序”代码以将日期/时间作为包含毫秒的纪元时间戳返回,以便返回的值按照以下格式进行格式化?

1500464550423
Run Code Online (Sandbox Code Playgroud)

我希望我可以修改代码的("yyyy.MM.dd HH:mm:ss:sss")一部分SimpleDateFormat formatter来做到这一点。

非常感谢任何帮助或建议。

谢谢

java datetime timestamp date epoch

4
推荐指数
1
解决办法
2万
查看次数

Simpledateformat无法解析的日期

String在数据库(match.getDate)中具有以下日期格式:

01/04/2018

这是我要格式化的日期,存储为日/月/年。我想为我的Android应用设置格式。

我想将日期格式化为:

星期日2018年4月1日

我的代码如下:

SimpleDateFormat fDate = new SimpleDateFormat("dd/MM/yyyy");
try {
    textViewDate.setText(fDate.parse(match.getDate()).toString());
} catch (ParseException ex) {
    System.out.println(ex.toString());
}
Run Code Online (Sandbox Code Playgroud)

输出:

周日四月08 00:00:00 GMT + 00:00 2018。

我也尝试过"EE, MM d, yyyy",但是它给了我:

java.text.ParseException:无法解析的日期:“ 01/04/2018”

java android date date-parsing simpledateformat

4
推荐指数
2
解决办法
1万
查看次数

Java日历与Android日历有什么区别

我是 Android 新手,我正在尝试获取当前日期,但 AndroidCalendar类需要 API 24。我需要支持较旧的设备,并且Time自 API 22 以来不推荐使用该类。

问题是如何在 API 23 上获取当前日期,我通过使用java.util.Calendar适用于所有版本的方法解决了这个问题。那么我应该使用什么,Android 日历还是 Java 日历?

请注意,使用 Android 日历时,日、月和年只是整数。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    day =android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.DAY_OF_MONTH);
    month = android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.MONTH);
    year = android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.YEAR);
}
else {
    day = java.util.Calendar.getInstance().get(java.util.Calendar.DAY_OF_MONTH);
    month = java.util.Calendar.getInstance().get(java.util.Calendar.MONTH);
    year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
}
Run Code Online (Sandbox Code Playgroud)

仅使用 Java 日历时,无需检查 API 版本

day = java.util.Calendar.getInstance().get(java.util.Calendar.DAY_OF_MONTH);
month = java.util.Calendar.getInstance().get(java.util.Calendar.MONTH);
year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
Run Code Online (Sandbox Code Playgroud)

java android calendar android-calendar java-calendar

4
推荐指数
1
解决办法
1934
查看次数

UTC使用JodaTime以毫秒为单位的当地时间

我试图使用Jodatime显示特定时间段内的交易.

我们的服务器要求开始日期和结束日期为UTC(这可能是显而易见的).因此,围绕这些的任何业务逻辑都使用DateTime对象,时区设置为DateTimeZone.UTC,例如

mStartDate = DateTime.now(UTC).withTimeAtStartOfDay();
Run Code Online (Sandbox Code Playgroud)

除了显示我不知道如何为本地(系统默认)时区增加它的时间之外,这很有效.理想情况下,我想使用DateUtils formatDateRange函数传递两个本地时间戳.但该getMillis()功能似乎没有考虑到本地偏移:

时间戳返回相同的毫秒时间

我也试过这个:

mTimePeriodTitle.setText(DateUtils.formatDateRange(mContext, f, mStartDate.getMillis(),
    mEndDate.getMillis(), DateUtils.FORMAT_SHOW_TIME,
    TimeZone.getDefault().getID()).toString());
Run Code Online (Sandbox Code Playgroud)

但它没有任何区别.所以我的问题是如何获得具有2个UTC时间戳的格式良好的本地日期范围?

java datetime android jodatime datetime-conversion

3
推荐指数
1
解决办法
1049
查看次数

Momentjs calendar() 等效于 Java

Momentjs 具有calendar()漂亮的打印时间跨度的功能,如下所示。

例如:

“上周一下午 1:14”

“09/21/2017”(如果日期是前一段时间)

Java中是否有等效的功能(如果可能,Joda-Time)?

moment().subtract(10, 'days').calendar(); // 09/21/2017
moment().subtract(6, 'days').calendar();  // Last Monday at 1:14 PM
moment().subtract(3, 'days').calendar();  // Last Thursday at 1:14 PM
moment().subtract(1, 'days').calendar();  // Yesterday at 1:14 PM
moment().calendar();                      // Today at 1:14 PM
moment().add(1, 'days').calendar();       // Tomorrow at 1:14 PM
moment().add(3, 'days').calendar();       // Wednesday at 1:14 PM
moment().add(10, 'days').calendar();      // 10/11/2017
Run Code Online (Sandbox Code Playgroud)

java jodatime date-difference momentjs

3
推荐指数
1
解决办法
8606
查看次数

Java 时区时间格式

我正在尝试以 ( ) 格式获取日期的输出String

\n\n
\n

20170801\xe2\x80\x8b \xe2\x80\x8b123030\xe2\x80\x8b \xe2\x80\x8b美国/洛杉矶

\n
\n\n

但使用这段代码:

\n\n
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hhmmss Z", Locale.US);\nsdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));\nSystem.out.println(sdf.format(new java.util.Date()));\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到的输出为(注意区域部分):

\n\n
\n

20174904 024908 -0700

\n
\n\n

知道如何修复它吗?我需要打印"\xe2\x80\x8bAmerica/Los_Angeles"而不是"-0700".

\n

java timezone datetime datetime-format simpledateformat

3
推荐指数
1
解决办法
3009
查看次数