我正在添加这个问题,因为我是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日期和日历从一个时区到另一个时区进行简单的转换.我试图运行以下代码
Calendar instance = Calendar.getInstance(TimeZone.getTimeZone("Europe/London"));
Date date = instance.getTime();
System.out.println(date);
GregorianCalendar instance2 = new GregorianCalendar(TimeZone.getTimeZone("Europe/Athens"));
instance2.setTime(instance.getTime());
System.out.println(instance2.getTime());
Run Code Online (Sandbox Code Playgroud)
但仍然返回相同的日期,而不是+1小时...整个问题似乎微不足道,但我找不到任何简单的答案.在此先感谢您的帮助.
我在where子句中使用带有时间戳的PreparedStatement:
PreparedStatement s=c.prepareStatement("select value,utctimestamp from t where utctimestamp>=? and utctimestamp<?");
s.setTimestamp(1, new Timestamp(1273017600000L)); //2010-05-05 00:00 GMT
s.setTimestamp(2, new Timestamp(1273104000000L)); //2010-05-06 00:00 GMT
ResultSet rs = s.executeQuery();
if(rs.next()) System.out.println(rs.getInt("value"));
Run Code Online (Sandbox Code Playgroud)
当我在客户端计算机上有不同的时区时,我得到的结果是不同的.这是Oracle jdbc中的错误吗?还是纠正行为?
Oracle数据库版本是10.2,我已经尝试使用oracle jdbc瘦驱动程序版本10.2和11.1.
参数是Timestamp,我预计在途中不会进行任何时间转换.数据库列类型是DATE,但我也使用TIMESTAMP列类型检查它,结果相同.
有没有办法达到正确的结果?我无法将整个应用程序中的默认时区更改为UTC.
谢谢你的帮助
嗨,我想设置德克萨斯州圣安东尼奥的时区.有些请告诉我如何在我的Java代码中设置相同.
我希望它的格式与美国/纽约有些相似
目前我正在使用此代码
TimeZone.getTimeZone("America/Denver");
Run Code Online (Sandbox Code Playgroud)
但"美国/丹佛"似乎并不适合德克萨斯州圣安东尼奥市
我有一个Grails应用程序,代码如下:
Date now = Calendar.getInstance().getTime() //Also tried new Date()
println "now: " + now
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我明白了now: Thu Aug 18 12:47:09 CDT 2011
.我需要将日期设置为GMT,而不是当地时间,因为我需要将GMT时间存储在数据库中.我可以使用simpleDateFormat对象在GMT中打印出时间,但我需要将其实际存储为GMT.
问题:如何使用GMT将Date对象转换为Date对象?
我需要将毫秒转换为GMT日期(在Android应用中),例如:
1372916493000
当我通过此代码转换它:
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
cal.setTimeInMillis(millis);
Date date = cal.getTime();
Run Code Online (Sandbox Code Playgroud)
结果是07:41 07/04/2013
.当我使用时,结果是一样的:
Date date = new Date(millis);
Run Code Online (Sandbox Code Playgroud)
不幸的是结果看起来不正确,看起来像我当地的时间.我尝试通过此服务转换相同的数字,结果是05:41 07/04/2013
,我认为是正确的.所以我有两个小时的差异.任何人都有任何建议/提示我的转换有什么问题?
我正在尝试将一些UTC时间的字符串转换为应设置为GMT-5的Java Calendar对象.
我当前的UTC字符串输入是这样的:
UTC日期:20050329174411
我使用这段代码(我检测'pattern'如下所示):
DateFormat dateFormat = new SimpleDateFormat(pattern);
Date date = dateFormat.parse(utcDate);
calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-5"));
calendar.setTime(date);
Run Code Online (Sandbox Code Playgroud)
然后我打印出这样的时间:
calendar.getTime()
我得到了这个结果:
格林威治标准时间:2005年3月29日星期二17:44:11
我需要支持这些日期/时间字符串模式:
FORMAT_UTC4 = "yyyy";
FORMAT_UTC6 = "yyyyMM";
FORMAT_UTC8 = "yyyyMMdd";
FORMAT_UTC10 = "yyyyMMddHH";
FORMAT_UTC12 = "yyyyMMddHHmm";
FORMAT_UTC14 = "yyyyMMddHHmmss";
Run Code Online (Sandbox Code Playgroud)
我希望时间设置为"12:44:11".我已经阅读了几个例子,我发现日期时间处理非常令人困惑.对我来说,它总是一样的,我得到一些字符串格式化的UTC,我把它转换为GMT-5.我觉得它应该很容易!
参考1:如何用Java获取UTC或GMT中的当前日期和时间?
参考2:如何使用Java处理日历时区?
我需要使用澳大利亚时区创建一个java.util.Date对象.下游组件中使用的标记库需要此对象(因此我坚持使用Date).
这是我尝试过的:
TimeZone timeZone = TimeZone.getTimeZone("Australia/Sydney");
GregorianCalendar defaultDate = new GregorianCalendar(timeZone);
Date date = defaultDate.getTime();
Run Code Online (Sandbox Code Playgroud)
但是,"date"始终返回当前本地时间(在我的情况下,ET).我在这做错了什么?甚至可以使用不同的时区设置Date对象吗?
更新:
谢谢你的回复!如果我想将格式化的日期输出为字符串,则此方法有效,但如果我想返回日期对象则不行.例如:
Date d = new Date();
DateFormat df = new SimpleDateFormat();
df.setTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
String formattedDate = df.format(d); // returns Sydney date/time
Date myDate = df.parse(formattedDate); // returns local time(ET)
Run Code Online (Sandbox Code Playgroud)
我想我最终会重新修改我们的日期taglib.