Java 如何打印没有时区的日期?
我有一个移动应用程序,我在其中捕获一个日期/时间,并将其以毫秒的形式发送到servlet-例如,我在手机中捕捉到凌晨12:55,并将其发送到我的服务器- 因此,我从发送的毫秒数构造日期,并使用SimpleDateFormat打印它,但时间不同,它打印的是上午8:55。 我知道问题是因为我使用了两个不同的时区,我的问题是: 如果不应用任何时区来显示同一时间,如何显示该时间Java 如何打印没有时区的日期?,java,datetime,Java,Datetime,我有一个移动应用程序,我在其中捕获一个日期/时间,并将其以毫秒的形式发送到servlet-例如,我在手机中捕捉到凌晨12:55,并将其发送到我的服务器- 因此,我从发送的毫秒数构造日期,并使用SimpleDateFormat打印它,但时间不同,它打印的是上午8:55。 我知道问题是因为我使用了两个不同的时区,我的问题是: 如果不应用任何时区来显示同一时间,如何显示该时间 提前感谢您需要使用日历更改时区,但没有API // Change a date in another timezone pub
提前感谢您需要使用日历更改时区,但没有API
// Change a date in another timezone
public static Date changeTimeZone(Date date, TimeZone zone) {
Calendar first = Calendar.getInstance(zone);
first.setTimeInMillis(date.getTime());
Calendar output = Calendar.getInstance();
output.set(Calendar.YEAR, first.get(Calendar.YEAR));
output.set(Calendar.MONTH, first.get(Calendar.MONTH));
output.set(Calendar.DAY_OF_MONTH, first.get(Calendar.DAY_OF_MONTH));
output.set(Calendar.HOUR_OF_DAY, first.get(Calendar.HOUR_OF_DAY));
output.set(Calendar.MINUTE, first.get(Calendar.MINUTE));
output.set(Calendar.SECOND, first.get(Calendar.SECOND));
output.set(Calendar.MILLISECOND, first.get(Calendar.MILLISECOND));
return output.getTime();
}
链接:
我认为这应该行得通。我还没有对它进行广泛的测试。您需要使用日历来更改时区,但没有用于更改时区的API
// Change a date in another timezone
public static Date changeTimeZone(Date date, TimeZone zone) {
Calendar first = Calendar.getInstance(zone);
first.setTimeInMillis(date.getTime());
Calendar output = Calendar.getInstance();
output.set(Calendar.YEAR, first.get(Calendar.YEAR));
output.set(Calendar.MONTH, first.get(Calendar.MONTH));
output.set(Calendar.DAY_OF_MONTH, first.get(Calendar.DAY_OF_MONTH));
output.set(Calendar.HOUR_OF_DAY, first.get(Calendar.HOUR_OF_DAY));
output.set(Calendar.MINUTE, first.get(Calendar.MINUTE));
output.set(Calendar.SECOND, first.get(Calendar.SECOND));
output.set(Calendar.MILLISECOND, first.get(Calendar.MILLISECOND));
return output.getTime();
}
链接:
我认为这应该行得通。我还没有对它进行过广泛的测试。日历和日期对象以毫秒为单位存储与UTC相关的日期信息 (当前时间与1970年1月1日UTC午夜之间的差值,以毫秒为单位) 这意味着日历/日期对象不会为不同的时区存储不同的值。它们在内部总是使用相同的值。。。格式通常会改变 也许您可以在本地/默认时区中使用SimpleDataFormat:
SimpleDateFormat sdf = new SimpleDateFormat("S")
Date d = sdf.parse(milliseconds);
您还可以尝试更改DateFormat的时区,直到它与您的预期输出相匹配
sdf.setTimeZone(TimeZone.getTimeZone("GMT-8"));
System.out.println(sdf.toString());
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4"));
System.out.println(sdf.toString());
日历和日期对象以毫秒为单位存储与UTC相关的日期信息 (当前时间与1970年1月1日UTC午夜之间的差值,以毫秒为单位) 这意味着日历/日期对象不会为不同的时区存储不同的值。它们在内部总是使用相同的值。。。格式通常会改变 也许您可以在本地/默认时区中使用SimpleDataFormat:
SimpleDateFormat sdf = new SimpleDateFormat("S")
Date d = sdf.parse(milliseconds);
您还可以尝试更改DateFormat的时区,直到它与您的预期输出相匹配
sdf.setTimeZone(TimeZone.getTimeZone("GMT-8"));
System.out.println(sdf.toString());
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4"));
System.out.println(sdf.toString());