简体   繁体   中英

Parsing time string and changing timezone

I am retrieving data from a webservice that provides a timestamp in the form of HH:mm:ss I am using SimpleDateFormat to convert this string into a date object then change its timezone if needed and also convert it from 24hour to 12 hour time.

Problem: When a time is fed in for 12am it looks like this 00:00:00 so 12:05 is 00:05:00 When i get the results they look like this.

times fed in 22:00:00 to 00:01:00

times retrieved 10:00 pm to 0:01 am

I have been looking around to see if there is a way to fix it but i feel like i will need to make a special case and parse the string myself if it has a 0 in the hours place.

Any help would be greatly appreciated.

public String parseTime(String time) {
    String mTime = null;
    TimeZone thisTimeZone = TimeZone.getDefault();
    TimeZone ourTimeZone = TimeZone.getTimeZone("America/Los_Angeles");
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.US);
    SimpleDateFormat sdfThisTimeZone = new SimpleDateFormat("K:mm:a",
            Locale.getDefault());

    Date date = null;
    sdfThisTimeZone.setTimeZone(thisTimeZone);
    sdf.setTimeZone(ourTimeZone);
    try {
        date = sdf.parse(time);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mTime = sdfThisTimeZone.format(date.getTime());
//**********************************New: Does Not Work********************************
            DecimalFormat nft = new DecimalFormat("00"); mTime = nft.format(mTime);
//**********************************New **********************************************
    return mTime;
}

I have tried the line using DecimalFormat but i just copied it into the code for now to see if it would work. Unfortunately it made my app crash. The code that i have posted is executed inside an Async Task so i am not sure if that makes any difference but still thankyou for your help. Eventually i will solve this. But for now it is such a small detail that only occurs for 1 hour at 12am that i am moving on to bigger issues. If anyone can shed some light on this that would be awesome.

String getConvertedDateTime (String dateTime) {

    String convertedDateTime = dateTime;

    if (convertedDateTime != null

            && !convertedDateTime.equalsIgnoreCase("")

            && !convertedDateTime.equalsIgnoreCase("null")) {

        try {

            SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");

            Calendar calendar = Calendar.getInstance();

            java.util.Date convertedDate = formatter
                    .parse(convertedDateTime);
        formatter.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
        convertedDateTime = formatter.format(convertedDate.getTime());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return convertedDateTime;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM