我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
我在重置Java时遇到了问题.对于给定的日期,我想将小时数设置为00:00:00.
这是我的代码:
/**
* Resets milliseconds, seconds, minutes and hours from the provided date
*
* @param date
* @return
*/
public static Date trim(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR, 0);
return calendar.getTime();
}
Run Code Online (Sandbox Code Playgroud)
问题是,有时候是时间12:00:00
,有时是时候00:00:00
,当我查询数据库中保存的实体07.02.2013 00:00:00
和存储的实际实体时间时,12:00:00
查询失败.
我知道12:00:00 == 00:00:00
!
我正在使用AppEngine.这是一个appengine bug,问题还是其他一些问题?或者它取决于其他东西?
我Date
用Java 创建了一个对象.当我这样做时,它显示如下:date=Tue Aug 09 00:00:00 IST 2011
.结果,似乎我的Excel文件减少了一天(27 feb变为26 feb,依此类推)我认为一定是因为时间.我怎样才能把它设置为下午5:30?
我希望将毫秒截断到几天,我可以使用
Instant.now().truncatedTo(ChronoUnit.DAYS).toEpochMilli()
Run Code Online (Sandbox Code Playgroud)
但我无法截断ChronoUnit.MONTH
(它抛出异常).我需要使用日历吗?
我在postgresql数据库中有以下查询
SELECT *
FROM accounts
where insertdate BETWEEN '2012-01-01' AND CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
那么如何才能替换当年'2012-01-01'
第一天的询问
还有一个问题.当我在帐户表中有一个新记录时,同一时刻运行上面的选择,所以它不会给我带来我刚刚制作的记录.这是否合理?超越它的最佳方法是什么?
我需要制作日期是键的地图.如果2个日期对象具有相同的getTime()
方法值,则它们是等于的.
我只对年,月,日感兴趣.如何trim
获得"清除"日期不必要的小时和分钟?
我有一个带有(java.util.)Date属性的项目列表,我想为从最早的日期到现在的每一天创建一个DataSeriesItem .这是一个带有时间轴的图表系列.
该DataSeriesItem的创建将如下所示:
DataSeriesItem seriesItem = new DataSeriesItem(Date, occurrenceCount);
其中occurrenceCount
Date属性与该日匹配的Items的数量.第一个参数也可以是类型java.time.Instant
我已经设法找到一种有效的方法,但我确信我的方法非常糟糕,并且可以用一个流来完成,也许两个.但是,我是溪流的初学者,不能用我的知识来做.
这有可能与流?它怎么可能会像约?
我不是让你真正做到我的整个重新执行,但只有我指向正确的streamfunctions和映射,你会使用,而加分它的一个例子.
这是我丑陋的解决方案:
List<?> items = myItems;
Collection<Date> foundDates = new HashSet<>();
for (Object item : items) {
foundDates.add((Date)getPropertyValueFromItem(item, configurator.getDateProperty()));
}
//====== This is the part I am asking about ======//
Map<Instant, Integer> foundInstants = new HashMap<>();
foundDates.stream().sorted(Date::compareTo).forEach(date -> {
Calendar c = Calendar.getInstance();
c.clear(); // clear nanoseconds, or else equals won't work!
c.set(date.getYear()+1900, date.getMonth(), date.getDate(), 0, 0, 0);
if(!foundInstants.containsKey(c.toInstant())){ …
Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,我想比较两个日期.但是,我只想比较年,月和日.这就是我能做到的:
private Date trim(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR, 0);
return calendar.getTime();
}
Run Code Online (Sandbox Code Playgroud)
我使用此功能来修剪所有单位,但天,月和年.
现在,问题是你怎么看待它?你知道其他任何方式吗?
谢谢
我想实现一个线程安全的函数来从java.util.Date中删除时间部分.
我试过这种方式
private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
public static Date removeTimeFromDate(Date date) {
Date returnDate = date;
if (date == null) {
return returnDate;
}
//just have the date remove the time
String targetDateStr = df.format(date);
try {
returnDate = df.parse(targetDateStr);
} catch (ParseException e) {
}
return returnDate;
}
Run Code Online (Sandbox Code Playgroud)
并使用synchronized或threadLocal使其成为线程安全的.但它有更好的方法在Java中实现它.看来这种方式有点冗长.我对此不满意.
我需要从Date
对象中删除时间。这是我的尝试,
代码:
System.out.println("date " + dbDate);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("formatter.format(dbDate) " + formatter.format(dbDate));
System.out.println("final " + formatter.parse(formatter.format(dbDate)));
Run Code Online (Sandbox Code Playgroud)
输出:
date 2011-12-03 23:59:59.0
formatter.format(dbDate) 2011-12-03
final Sat Dec 03 00:00:00 IST 2011
Run Code Online (Sandbox Code Playgroud)
我想在2011-12-03
. 但转换toString()
后Date
是不同的格式。我错过了一些东西。请帮忙。
更新:
在我的应用程序中,我有两种不同的方法来获取dbDate
. EXPIRY_DATE
列是DATE
.
第一个查询使用dbDate = (java.util.Date) rs.getDate("EXPIRY_DATE");
.
为此dbDate
,System.out.println("date " + dbDate);
给date 2011-12-03
第二个查询使用 dbDate = rs.getTimestamp("EXPIRY_DATE");
为此dbDate
,System.out.println("date " + dbDate);
给date 2011-12-03 …
java ×8
date ×5
datetime ×3
java-8 ×2
android ×1
calendar ×1
java-stream ×1
java-time ×1
jdbc ×1
postgresql ×1
sql ×1
threetenabp ×1
threetenbp ×1
truncate ×1