如果我要给出一个特定的java.util.Date,我该如何生成该给定日期的开始和结束.例如,我的日期是August 25, 2011,那么我的开始日期是August 25, 2011 00 00 00,我的日期结束August 25, 2011 23 59 59
背景 :(如果你想知道为什么我问这个问题,请阅读下面的内容)
我使用JPA映射date到我的MySql数据库.我希望date有时间,所以我用TemoporalType.TIMESTAMP
@Temporal(TemporalType.TIMESTAMP)
private Date dateProcess; //java.util.Date
Run Code Online (Sandbox Code Playgroud)
我需要查询给定特定日期的所有数据,并且由于date存储如上,我需要一个日期范围来实现我想要的.
我的游戏计划是转换java.util.Date为JodaTime#DateTinme,然后在那里构建开始和结束日期,并将其转换回来,以便我可以作为参数传递给JPQL.但似乎JodaTime非常不可变,我似乎无法在任何地方看到一个setter方法.
假设我有以下解析器与joda-time lib for android
DateTimeFormat.forPattern("dd.MM.yyyy").parseDateTime(maybeDate);
Run Code Online (Sandbox Code Playgroud)
我的目标是使用TextWatcher过滤某些editText中的输入,并尝试解析输入并检查它是否为Date.
尽管有4个"y"字母,但以下时间通过了这种模式!
06.12.1(当我试图把2008年12月6日)
格式化程序的PS appendYear(4,4)也失败了.
我想将Joda LocalTime转换为java.util.Date而不是 LocalDate.如果这有帮助,我已经有了一个LocalTime对象.显然,LocalTime中没有"日期"部分.所以我不能直接将LocalTime转换为Date.有一个简单的方法吗?
脚步 -
LocalTime loct
LocalDate locd = Todays date + loct
Date da = locd.toDate();
Run Code Online (Sandbox Code Playgroud) 我需要以毫秒为单位获得最准确的时间(与系统时钟同步).我知道System.currentTimeMillis()是准确的.我也知道JodaTime毫秒是准确的.
哪个更准确?
谢谢!
我使用jodatime创建了一个Utility方法来计算日期差异并显示它,例如3y 2m 4d.
这是我的方法:
public static String dateBetween(Object start, Object end) {
Period period = new Period(new LocalDate(start), new LocalDate(end));
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroAlways()
.appendYears().appendSuffix("y ")
.appendMonths().appendSuffix("m ")
.appendDays().appendSuffix("d")
.toFormatter();
return formatter.print(period);
}
Run Code Online (Sandbox Code Playgroud)
使用testng创建测试脚本如下:
@DataProvider(name = "dateBetweenData")
public static Object[][] dateBetweenData() {
return new Object[][] {
{ "01/08/2010", "02/07/2012", "1y 11m 1d" },
{ "01/08/2010", "03/07/2012", "1y 11m 2d" },
{ "01/08/2010", "11/07/2012", "1y 11m 10d" },
{ "01/08/2010", "21/07/2012", "1y 11m 20d" },
{ "01/08/2010", "31/07/2012", "1y …Run Code Online (Sandbox Code Playgroud) 我需要将Joda-Time日期/时间转换为java.util.Date.我做的如下.
DateTimeFormatter dateTimeFormatter=DateTimeFormat.forPattern("dd-MMM-yyyy hh:mm:ss aa");
DateTime dateTime = dateTimeFormatter.parseDateTime("2-Oct-2013 11:34:26 AM").withZone(DateTimeZone.UTC);
System.out.println(dateTime);
Run Code Online (Sandbox Code Playgroud)
这将按预期显示由UTC区域表示的日期/时间.在这种情况下,它是2013-10-02T06:04:26.000Z
当dateTime转换java.util.Date为如下时,
System.out.println(dateTime.toDate());
Run Code Online (Sandbox Code Playgroud)
它表明,Wed Oct 02 11:34:26 IST 2013.它应该是UTC格式.
从Joda-Time转换后有没有办法表示Datein UTC?
我希望将日期存储到由UTC区域表示的数据库中. org.joda.time.DateTime需要在将其插入数据库之前转换为java.util.Date(或java.sql.Timestamp).如何克服这种情况?
当我按下按钮显示DatePickerDialog时,对话框显示一个月更大.例如,如果我使用这样的当前日期(使用joda库的DateTime)启动:
DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
DateTime dt = new DateTime(zone);
int year = dt.getYear();
int month = dt.getMonthOfYear();
int day = dt.getDayOfMonth();
Run Code Online (Sandbox Code Playgroud)
这是2014年7月7日,日期对话框显示更大的一个月07/09/2014.我不明白为什么会这样.
表示datePickerFragment的片段是:
@SuppressLint("ValidFragment")
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
@SuppressLint("ValidFragment")
TextView txtDate;
GlobalData appState;
public DatePickerFragment(TextView txtDate) {
super();
this.txtDate = txtDate;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
DateTime dt = new DateTime(zone);
int year = dt.getYear();
int month = …Run Code Online (Sandbox Code Playgroud) 假设我有一个DateTime参考,我希望在前一天的15:00获得时间.如果我说
DateTime someTime = ....;
DateTime yesterday1500 = someTime.toDateMidnight().toDateTime().minusDays(1).plusHours(15);
Run Code Online (Sandbox Code Playgroud)
然后这将在所有日子工作,除非有夏令时变化.
如果someTime ='1.4.2014',我会得到'31 .3.2014 15:00'.
如果someTime = '31 .3.2014'我会得到'30 .3.2014 16:00'.
我能想到的最好的是
yesterday1500 = new DateTime(someTime.getYear(), someTime.getMonthOfYear(), someTime.getDayOfMonth(), 15, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
它工作正常,但看起来很笨重.有没有更好的办法?
编辑:我在克罗地亚是CEST(UTC + 01:00)时区.
编辑2:添加了... toDateMidnight().toDateTime()...示例代码,表明someTime可以在任何时间点
我写了一个函数将日期时间字符串转换为格式化的日期时间字符串并返回结果.
输入日期时间字符串= 2015-12-16 12:27:07.0
输出日期时间字符串=02/20/2016 12:32 PM
public static String convertDateToCustomFormat(String dateString) {
DateFormat dbDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DateFormat uiDateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
String date = null;
try {
date = uiDateFormat.format(dbDateFormat.parse(dateString));
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
Run Code Online (Sandbox Code Playgroud)
上面的功能工作正常.但我用于java.text.SimpleDateFormat格式化字符串.我试图将相同的功能转换为joda.time.format.DateTimeFormat但我收到一条错误消息说
java.lang.IllegalArgumentException: Invalid format: "2015-12-16 12:27:07.0" is malformed at ".0"
Run Code Online (Sandbox Code Playgroud)
这是我使用joda日期时间的新功能
输入日期时间字符串= 2015-12-16 12:27:07.0
输出日期时间应该是这样 =02/20/2016 12:32 PM
public static String convertDateToCustomFormat(String dateString) {
DateTimeFormatter dbDateFormat = DateTimeFormat
.forPattern(("yyyy-MM-dd …Run Code Online (Sandbox Code Playgroud) 我总是在概念上遇到麻烦,将日期值表示为没有时间的对象(例如,SQL具有DATE旁边的类型DATETIME)。同样的想法经常会产生用总是存储日期和时间(例如C#DateTime)的语言的问题。突然出现时区错误,开发人员坚持认为所有时区hullabaloo都可以忽略,因为它们DateTime实际上只是“一个日期”。但这到底意味着什么?
在我看来,这样的“纯正日期”只能用两种方式解释:
我认为所有“普通日期”用例都属于这两种类别,并且仅当软件仅在配置了完全相同时区的系统上运行并与之通信时,才可以忽略时间/时区。
有人可以提供反例或第三种解释吗?