All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jivesoftware.smackx.packet.Time Maven / Gradle / Ivy

Go to download

Smack is an Open Source XMPP (Jabber) client library for instant messaging and presence. This library provides the client side functionality as specified in the core XMPP specifications as related to the client side of said specifications.

There is a newer version: 3.3.0
Show newest version
/**
 * $RCSfile$
 * $Revision: 7407 $
 * $Date: 2007-03-07 23:25:42 -0600 (Wed, 07 Mar 2007) $
 *
 * Copyright 2003-2007 Jive Software.
 *
 * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jivesoftware.smackx.packet;

import org.jivesoftware.smack.packet.IQ;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * A Time IQ packet, which is used by XMPP clients to exchange their respective local
 * times. Clients that wish to fully support the entitity time protocol should register
 * a PacketListener for incoming time requests that then respond with the local time.
 * This class can be used to request the time from other clients, such as in the
 * following code snippet:
 *
 * 
 * // Request the time from a remote user.
 * Time timeRequest = new Time();
 * timeRequest.setType(IQ.Type.GET);
 * timeRequest.setTo([email protected]/resource);
 *
 * // Create a packet collector to listen for a response.
 * PacketCollector collector = con.createPacketCollector(
 *                new PacketIDFilter(timeRequest.getPacketID()));
 *
 * con.sendPacket(timeRequest);
 *
 * // Wait up to 5 seconds for a result.
 * IQ result = (IQ)collector.nextResult(5000);
 * if (result != null && result.getType() == IQ.Type.RESULT) {
 *     Time timeResult = (Time)result;
 *     // Do something with result...
 * }

* * Warning: this is an non-standard protocol documented by * XEP-0090. Because this is a * non-standard protocol, it is subject to change. * * @author Matt Tucker */ public class Time extends IQ { private static SimpleDateFormat utcFormat = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss"); private static DateFormat displayFormat = DateFormat.getDateTimeInstance(); private String utc = null; private String tz = null; private String display = null; /** * Creates a new Time instance with empty values for all fields. */ public Time() { } /** * Creates a new Time instance using the specified calendar instance as * the time value to send. * * @param cal the time value. */ public Time(Calendar cal) { TimeZone timeZone = cal.getTimeZone(); tz = cal.getTimeZone().getID(); display = displayFormat.format(cal.getTime()); // Convert local time to the UTC time. utc = utcFormat.format(new Date( cal.getTimeInMillis() - timeZone.getOffset(cal.getTimeInMillis()))); } /** * Returns the local time or null if the time hasn't been set. * * @return the lcocal time. */ public Date getTime() { if (utc == null) { return null; } Date date = null; try { Calendar cal = Calendar.getInstance(); // Convert the UTC time to local time. cal.setTime(new Date(utcFormat.parse(utc).getTime() + cal.getTimeZone().getOffset(cal.getTimeInMillis()))); date = cal.getTime(); } catch (Exception e) { e.printStackTrace(); } return date; } /** * Sets the time using the local time. * * @param time the current local time. */ public void setTime(Date time) { // Convert local time to UTC time. utc = utcFormat.format(new Date( time.getTime() - TimeZone.getDefault().getOffset(time.getTime()))); } /** * Returns the time as a UTC formatted String using the format CCYYMMDDThh:mm:ss. * * @return the time as a UTC formatted String. */ public String getUtc() { return utc; } /** * Sets the time using UTC formatted String in the format CCYYMMDDThh:mm:ss. * * @param utc the time using a formatted String. */ public void setUtc(String utc) { this.utc = utc; } /** * Returns the time zone. * * @return the time zone. */ public String getTz() { return tz; } /** * Sets the time zone. * * @param tz the time zone. */ public void setTz(String tz) { this.tz = tz; } /** * Returns the local (non-utc) time in human-friendly format. * * @return the local time in human-friendly format. */ public String getDisplay() { return display; } /** * Sets the local time in human-friendly format. * * @param display the local time in human-friendly format. */ public void setDisplay(String display) { this.display = display; } public String getChildElementXML() { StringBuilder buf = new StringBuilder(); buf.append(""); if (utc != null) { buf.append("").append(utc).append(""); } if (tz != null) { buf.append("").append(tz).append(""); } if (display != null) { buf.append("").append(display).append(""); } buf.append(""); return buf.toString(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy