我正在尝试将电子邮件(日期对象)的接收日期与 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) 我正在尝试将字符串 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制作日记应用程序,我想让用户选择他们所在的时区.时间一直是我编程的混乱区域.
我将为可用的时区创建一个枚举.
我将以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 8中编写新项目.我建议使用Java 8日期时间API,但我的一位同事说新的日期时间API运行缓慢.
这是真的吗?另外,我想从Oracle获得一些官方文档,其中提到您不应该java.util.Date在新项目中使用.
我对 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来做到这一点。
非常感谢任何帮助或建议。
谢谢
我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”
我是 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) 我试图使用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时间戳的格式良好的本地日期范围?
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) 我正在尝试以 ( ) 格式获取日期的输出String:
\n\n\n20170801\xe2\x80\x8b \xe2\x80\x8b123030\xe2\x80\x8b \xe2\x80\x8b美国/洛杉矶
\n
但使用这段代码:
\n\nSimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hhmmss Z", Locale.US);\nsdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));\nSystem.out.println(sdf.format(new java.util.Date()));\nRun Code Online (Sandbox Code Playgroud)\n\n我得到的输出为(注意区域部分):
\n\n\n\n\n20174904 024908 -0700
\n
知道如何修复它吗?我需要打印"\xe2\x80\x8bAmerica/Los_Angeles"而不是"-0700".