Skip to content

Instantly share code, notes, and snippets.

@kistvan
kistvan / gist:3081745
Created July 10, 2012 07:11
joda-Time ある日付が期間From Toに含まれているかどうか判定
public boolean isOverLap(Date now, Date periodFrom, Date periodTo) {
//nullの場合は常に成立するよう最小値
DateTime from = periodFrom == null ? new DateTime(0) : new DateTime(periodFrom);
//nullの場合は常に成立するよう最大値
DateTime to = periodTo == null ? new DateTime(Long.MAX_VALUE) : new DateTime(periodTo);
Interval base = new Interval(new DateTime(now), new DateTime(now));
Interval interval = new Interval(from, to);
//以上、以下でtrueにする場合abuts()が必要 overlaps()だけだと未満、超
return interval.abuts(base) || interval.overlaps(base);
}
@kistvan
kistvan / gist:1984679
Created March 6, 2012 07:32
joda-Time 日付が違うかどうか判定
//java.util.Dateなどで初期化
LocalDate start = new LocalDate(...);
LocalDate end = new LocalDate(...);
// 日か月か年がstart < end の場合はtrue
Logger.debug("before? %s", start.isBefore(end));
// 日か月か年がstartとendで違ってればtrue
Logger.debug("not equal? %s", !start.equals(end));
@kistvan
kistvan / gist:1984521
Created March 6, 2012 07:11
joda-Time ある期間内で何日分離れているかどうかカウント Days.daysBetween
DateTime start = ... //期間はじまり
DateTime end = ... //期間おわり
Logger.debug("between:%s", Days.daysBetween(start, end).getDays());
//日付をまたいでも、24時間以上離れていない場合はゼロになる
@kistvan
kistvan / gist:1977568
Created March 5, 2012 09:03
joda-Time 日付文字列からパース (format文字列を指定してDateTime型に変換)
//commons-langのDateutilsを使った方がラク
DateTime dt = DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss").parseDateTime(string)
@kistvan
kistvan / gist:1921332
Created February 27, 2012 04:18
joda-Time 特定の時刻を年月日に丸めてDBに保存
DateMidnight dm = new DateMidnight(new Date());
Logger.debug("%s", dm.toString("yyyy-MM-dd HH:mm:ss")); //2012-02-27 00:00:00 のようなデータ
insertDababase(dm);
@kistvan
kistvan / gist:1898747
Created February 24, 2012 07:24
joda-Time 月の最終日、年の最終週を取得する
DateTime dt = new DateTime().withMonthOfYear(2); //今年の2月
Logger.debug("月の最終日 %s", dt.dayOfMonth().getMaximumValue());
Logger.debug("年の最終週 %s", dt.weekOfWeekyear().getMaximumValue());
@kistvan
kistvan / gist:1898560
Created February 24, 2012 06:44
joda-Time 先月のデータをDBから取得
DateMidnight monthMidnight = new DateMidnight(year, month, 1); //指定月の1日
Date to = monthMidnight.toDate();
Date from = monthMidnight.minusMonths(1).toDate(); //指定月の先月
Logger.debug("今月 %s", monthMidnight.toString("yyyy-MM-dd HH:mm:ss"));
Logger.debug("先月 %s", monthMidnight.minusMonths(1).toString("yyyy-MM-dd HH:mm:ss"));
searchDataBaseByMonthRange(from, to);
@kistvan
kistvan / gist:1898260
Created February 24, 2012 06:13
joda-Time 最も基本的な使い方 DBから昨日のデータを取ってくる
DateMidnight today = new DateMidnight(); //今日の0時を取得
DateMidnight yesterday = today.minusDays(1); //昨日の0時を取得
searchDatabaseRange(yesterday, today); //from, toに指定
Logger.debug("from:%s to:%s", today.toString("yyyy-MM-dd HH:mm:ss"),
yesterday.toString("yyyy-MM-dd HH:mm:ss"));
@kistvan
kistvan / gist:1892398
Created February 23, 2012 11:12
play frameworkでDBから大量のデータを処理するコード
import org.hibernate.ScrollableResults;
import org.hibernate.ejb.QueryImpl;
import play.db.jpa.JPA;
public static void executeManyData() {
QueryImpl<ManyData> q = (QueryImpl<ManyData>)em().createQuery(
"from " + ManyData.class.getName() + " where 0 = 0");
q.getHibernateQuery().setFetchSize(Integer.MIN_VALUE);