Java 是否可以创建日历对象,如3月3日星期二13:43:00(无时区)?
我需要发送带有时区的日历对象,如Java 是否可以创建日历对象,如3月3日星期二13:43:00(无时区)?,java,calendar,timezone,Java,Calendar,Timezone,我需要发送带有时区的日历对象,如3月3日星期二13:43:00。我知道Calendar对象总是返回2009年3月3日星期二13:43:00 CST,因此我如何在没有时区的情况下创建它?您可以使用类(更具体地说是具体的子类)按自己的意愿格式化日期。以下是一个例子: Calendar cal = Calendar.getInstance(); DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss"); String dateSt
3月3日星期二13:43:00
。我知道Calendar对象总是返回2009年3月3日星期二13:43:00 CST,因此我如何在没有时区的情况下创建它?您可以使用类(更具体地说是具体的子类)按自己的意愿格式化日期。以下是一个例子:
Calendar cal = Calendar.getInstance();
DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss");
String dateString = format.format(cal.getTime()));
印刷品:
Fri Mar 06 15:50:26
Fri Mar 06 15:50:26您可以使用一个简单的日期对象
Date d = new Date();
Date d2 = calendar.getTime();
或者更简单的,以毫秒为单位的时间
long time = System.currentTimeMillis();
为避免时区混淆,我建议将所有日期/时间存储并设置为标准时区,如GMT+0,然后根据需要转换显示时间等。在重新阅读您的问题和您对我的另一个答案的评论后,问题似乎是您希望结果是日历对象,而不是字符串。因此,这不是设置日历的字符串表示形式的问题 在本例中,您所问的问题在技术上是不可能的:Calendar类的所有实现都表示一个内部时间,该时间存储为自Unix纪元(1970年1月1日00:00 GMT)以来的毫秒数。波士顿的“上午5:00”时间与西雅图的“上午5:00”时间不同——它们有不同的内部时间戳 你最好的选择是在任何地方使用相同的时区,而GMT可能是最有意义的:
cal.setTimeZone(TimeZone.getTimeZone("GMT+0000"));
没有时区的日历对象是不可能的。真的,这没有任何意义-Calendar试图表示“”-在不知道所表示的时间所在的时区的情况下,如何在时间上表示实例 因此,有几件事需要考虑:
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getDefault()); // returns default TimeZone for your system
cal.setTimeZone(TimeZone.getTimeZone("EST")); // Eastern Standard Time
cal.setTimeZone(TimeZone.getTimeZone("Asia/Kolkota"); // UTC+5:30
,上的Javadocs。感谢您的回复,但我调用的服务正在查找Calendar对象,因此我无法使用DateFormat…Calendar.getTime()返回日期对象。。查看我刚刚发布的代码。感谢Kip共享代码,但它仍然无法解决我的问题,因为我需要将日历对象传递给带有时区或不带时区的服务,是哪个?你的问题和它的标题互相矛盾。@kamal:我试图澄清你的问题。如果我误解了,请更正。我正在寻找一个没有时区的日历对象。顺便说一句,它看起来像日历。setTimeZone(null)会导致一些错误;这似乎支持这样一种观点,即日历与时区非常紧密地联系在一起,并且需要它的时区参考。