Java 将时区转换回本地
我无法将日期对象转换回本地时区。我在谷歌上搜索了很多,但都找不到解决方案 我的场景是:我将一个请求(带有本地时区04/01/2014T000:00:00+0530的完整日期字符串)发送到一个web服务器,该服务器位于我所在时区以外的其他时区。服务器将其适当地转换为UTC,并执行一些操作,然后将CSV文件发送回。我在CSV中有一个日期列,它总是以GMT为单位Java 将时区转换回本地,java,groovy,Java,Groovy,我无法将日期对象转换回本地时区。我在谷歌上搜索了很多,但都找不到解决方案 我的场景是:我将一个请求(带有本地时区04/01/2014T000:00:00+0530的完整日期字符串)发送到一个web服务器,该服务器位于我所在时区以外的其他时区。服务器将其适当地转换为UTC,并执行一些操作,然后将CSV文件发送回。我在CSV中有一个日期列,它总是以GMT为单位 String input = "04/01/2014T00:00:00+0530"; DateFormat inputDateFormat
String input = "04/01/2014T00:00:00+0530";
DateFormat inputDateFormat = new SimpleDateFormat("MM/dd/yyyy'T'HH:mm:ssZ");
DateFormat csvFileDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm z");
Date inputDate = inputDateFormat.parse(input); // Mon Mar 31 18:30:00 GMT 2014
// inputDateFormat.getTimeZone(); // is always GMT
// After some processing I create CSV file
// within a loop
Date csvDate = // got Date from some operation, for simplicity I removed the code.
csvFileDateFormat.format(csvDate); // **HERE IS THE ISSUE**
// end of loop
我想正确设置csvFileDateFormat的时区。下面的代码可以工作,但我不想硬编码“GMT+05:30”。相反,我们只需要从输入字符串中提取时区
csvFileDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+05:30")); // I dont want to hard code
非常感谢您的帮助。
PS:我没有选择使用任何其他库,比如joda等等
问候
ArunDhaJ您可以使用
Locale.getDefault()
返回运行它的系统的默认时区。如果您不想返回,那么硬编码应该是安全的。也许此函数将帮助您:
private static TimeZone getTimeZoneFromString(String inputDateStr)
{
// TimeZone inputTimeZone = null;
// null or default
TimeZone inputTimeZone = TimeZone.getDefault();
try
{
DateFormat inputDateFormat = new SimpleDateFormat("MM/dd/yyyy'T'HH:mm:ssZ");
Date inputDate = inputDateFormat.parse(inputDateStr);
Date inputDate2 = inputDateFormat.parse(inputDateStr.substring(0, 19) + "+0000");
int offset = (int) (inputDate2.getTime() - inputDate.getTime());
for (String tzId : TimeZone.getAvailableIDs())
{
TimeZone tz = TimeZone.getTimeZone(tzId);
if (tz.getOffset(inputDate.getTime()) == offset)
{ // take the first matching one, display name doesn't matter
inputTimeZone = tz;
break;
}
}
}
catch (ParseException e)
{
e.printStackTrace();
}
return inputTimeZone;
}
谢谢你。在某种程度上,我只是通过解析输入字符串(在Groovy中)来实现的。。。字符串时区=输入[-5..-1];inputDateFormat.setTimeZone(TimeZone.getTimeZone(“GMT”+TimeZone));但我想知道是否有直接的方法可以做到这一点。