Set Android Things time zone - timezone
After installing Android Things on a Raspberry Pi, time is not correct. My time zone is GMT+2, and using date +%Z I see RPi's time zone is GMT. How can I set time zone?
Update (based on Michal Harakal's comment):
Since Developer Preview 6 TimeManager class provides access to device settings related to time (NB! TimeManager requires <uses-permission android:name="com.google.android.things.permission.SET_TIME" />). You can use .setTimeZone() method of for time zone set:
private void setupTimeZone(String timeZoneName) {
TimeManager timeManager = TimeManager.getInstance();
timeManager.setTimeZone(timeZoneName);
}
where timeZoneName is one of tz database time zones string, e.g. for Kyiv (GMT +2, DST +3):
setupTimeZone("Europe/Kiev");
Original answer:
You can set it programmatically from Application via AlarmManager.setTimeZone() like in this answer of Synesso:
AlarmManager am = (AlarmManager)getContext().getSystemService(Context.ALARM_SERVICE);
am.setTimeZone("Europe/Madrid");
with <uses-permission android:name="android.permission.SET_TIME_ZONE"/> permission in AndroidManifest.xml file.
List of TimeZone names.
I use these codes
TimeManager timeManager = TimeManager.getInstance();
timeManager.setTimeFormat(TimeManager.FORMAT_24);
// Set time zone to Eastern Standard Time
//timeManager.setTimeZone("America/New_York");
timeManager.setTimeZone("GMT");
calendar.setTime(date);
long timeStamp = calendar.getTimeInMillis();
timeManager.setTime(timeStamp);
with this permission :
com.google.android.things.permission.SET_TIME
Related
Getting datetime as a string in current timezone
In the MySQL DB: '2020-04-19 22:00:00'(UTC). That's also what my endpoint returns since I set the connection option dataStrings:true. On the client, after I fetch date: const timezone = moment.tz.guess(); const convertedDate = moment(date) .tz(timezone) .format(); convertedDate then equals to "2020-04-19T22:00:00+02:00" (I'm in the UTC+2 zone). I would like to get it in the format "2020-04-20T00:00:00" instead. How can I do that?
It looks like moment(date) believes your incoming date value is in local time, not UTC. So, your timezone conversion to local time changes nothing. You can tell moment it's UTC, like this: const timezone = moment.tz.guess(); const convertedDate = moment.utc(date) .tz(timezone) .format();
You do not need moment-timezone for this. With Moment by itself you can use the utc function when parsing, and the local function to convert to the user's local time zone before formatting. moment.utc('2020-04-19 22:00:00').local().format() //=> "2020-04-20T00:00:00+02:00" Also, the Moment team recommends using Moment for existing projects only. For new development, we recommend using Luxon instead: luxon.DateTime.fromSQL('2020-04-19 22:00:00', {zone: 'utc'}).toLocal().toISO() //=> "2020-04-20T00:00:00.000+02:00"
Changing Timezoneid with QTimzone in Qtcreator
I made a simple app displaying local time, utc time and the timezone offset. By default my qt app uses my local timezone "Europe/Amsterdam". But i want it to change when a new timezone is selected with the QCombobox which has a list of all the iana timezoneid's. But i can't find a method/function to change the default timezone to let say "Europe/Berlin" or any other timezoneid.
Eventually found the solution for my question. It seems i had to send a timezoneid with QDatime object: QString comboxs = ui->comboBox->currentText(); QByteArray timezoneQstring = comboxs.toLocal8Bit(); timezoneids = timezoneQstring.data(); QDateTime timeobj = QDateTime(QDate(2019, 11, 5), QTime(20,28), QTimeZone(timezoneids));
Convert iOS localTimeZone to a knownTimeZone
Using NSTimeZone the list of knownTimeZoneNames does not match the timezone retrieved by localTimeZone. How can I convert a timezone from localTimeZone to a time zone from knownTimeZoneNames. More specifically, the timezone .name return value must match a timezone in this list of timezones. (lldb) po [NSTimeZone localTimeZone] Local Time Zone (US/Pacific (PST) offset -28800) (lldb) po [[NSTimeZone localTimeZone] name] US/Pacific (lldb) po [NSTimeZone knownTimeZoneNames] <__NSCFArray 0x10ab5c00>( Africa/Abidjan, Africa/Accra, Africa/Addis_Ababa, Africa/Algiers, Africa/Asmara, Africa/Bamako, Africa/Bangui, Africa/Banjul, Africa/Bissau, Africa/Blantyre, Africa/Brazzaville, Africa/Bujumbura, Africa/Cairo, Africa/Casablanca, Africa/Ceuta, Africa/Conakry, Africa/Dakar, Africa/Dar_es_Salaam, Africa/Djibouti, Africa/Douala, Africa/El_Aaiun, Africa/Freetown, Africa/Gaborone, Africa/Harare, Africa/Johannesburg, Africa/Juba, Africa/Kampala, Africa/Khartoum, Africa/Kigali, Africa/Kinshasa, Africa/Lagos, Africa/Libreville, Africa/Lome, Africa/Luanda, Africa/Lubumbashi, Africa/Lusaka, Africa/Malabo, Africa/Maputo, Africa/Maseru, Africa/Mbabane, Africa/Mogadishu, Africa/Monrovia, Africa/Nairobi, Africa/Ndjamena, Africa/Niamey, Africa/Nouakchott, Africa/Ouagadougou, Africa/Porto-Novo, Africa/Sao_Tome, Africa/Tripoli, Africa/Tunis, Africa/Windhoek, America/Adak, America/Anchorage, America/Anguilla, America/Antigua, America/Araguaina, America/Argentina/Buenos_Aires, America/Argentina/Catamarca, America/Argentina/Cordoba, America/Argentina/Jujuy, America/Argentina/La_Rioja, America/Argentina/Mendoza, America/Argentina/Rio_Gallegos, America/Argentina/Salta, America/Argentina/San_Juan, America/Argentina/San_Luis, America/Argentina/Tucuman, America/Argentina/Ushuaia, America/Aruba, America/Asuncion, America/Atikokan, America/Bahia, America/Bahia_Banderas, America/Barbados, America/Belem, America/Belize, America/Blanc-Sablon, America/Boa_Vista, America/Bogota, America/Boise, America/Cambridge_Bay, America/Campo_Grande, America/Cancun, America/Caracas, America/Cayenne, America/Cayman, America/Chicago, America/Chihuahua, America/Costa_Rica, America/Creston, America/Cuiaba, America/Curacao, America/Danmarkshavn, America/Dawson, America/Dawson_Creek, America/Denver, America/Detroit, America/Dominica, America/Edmonton, America/Eirunepe, America/El_Salvador, America/Fortaleza, America/Glace_Bay, America/Godthab, America/Goose_Bay, America/Grand_Turk, America/Grenada, America/Guadeloupe, America/Guatemala, America/Guayaquil, America/Guyana, America/Halifax, America/Havana, America/Hermosillo, America/Indiana/Indianapolis, America/Indiana/Knox, America/Indiana/Marengo, America/Indiana/Petersburg, America/Indiana/Tell_City, America/Indiana/Vevay, America/Indiana/Vincennes, America/Indiana/Winamac, America/Inuvik, America/Iqaluit, America/Jamaica, America/Juneau, America/Kentucky/Louisville, America/Kentucky/Monticello, America/Kralendijk, America/La_Paz, America/Lima, America/Los_Angeles, America/Lower_Princes, America/Maceio, America/Managua, America/Manaus, America/Marigot, America/Martinique, America/Matamoros, America/Mazatlan, America/Menominee, America/Merida, America/Metlakatla, America/Mexico_City, America/Miquelon, America/Moncton, America/Monterrey, America/Montevideo, America/Montreal, America/Montserrat, America/Nassau, America/New_York, America/Nipigon, America/Nome, America/Noronha, America/North_Dakota/Beulah, America/North_Dakota/Center, America/North_Dakota/New_Salem, America/Ojinaga, America/Panama, America/Pangnirtung, America/Paramaribo, America/Phoenix, America/Port-au-Prince, America/Port_of_Spain, America/Porto_Velho, America/Puerto_Rico, America/Rainy_River, America/Rankin_Inlet, America/Recife, America/Regina, America/Resolute, America/Rio_Branco, America/Santa_Isabel, America/Santarem, America/Santiago, America/Santo_Domingo, America/Sao_Paulo, America/Scoresbysund, America/Shiprock, America/Sitka, America/St_Barthelemy, America/St_Johns, America/St_Kitts, America/St_Lucia, America/St_Thomas, America/St_Vincent, America/Swift_Current, America/Tegucigalpa, America/Thule, America/Thunder_Bay, America/Tijuana, America/Toronto, America/Tortola, America/Vancouver, America/Whitehorse, America/Winnipeg, America/Yakutat, America/Yellowknife, Antarctica/Casey, Antarctica/Davis, Antarctica/DumontDUrville, Antarctica/Macquarie, Antarctica/Mawson, Antarctica/McMurdo, Antarctica/Palmer, Antarctica/Rothera, Antarctica/South_Pole, Antarctica/Syowa, Antarctica/Vostok, Arctic/Longyearbyen, Asia/Aden, Asia/Almaty, Asia/Amman, Asia/Anadyr, Asia/Aqtau, Asia/Aqtobe, Asia/Ashgabat, Asia/Baghdad, Asia/Bahrain, Asia/Baku, Asia/Bangkok, Asia/Beirut, Asia/Bishkek, Asia/Brunei, Asia/Choibalsan, Asia/Chongqing, Asia/Colombo, Asia/Damascus, Asia/Dhaka, Asia/Dili, Asia/Dubai, Asia/Dushanbe, Asia/Gaza, Asia/Harbin, Asia/Hebron, Asia/Ho_Chi_Minh, Asia/Hong_Kong, Asia/Hovd, Asia/Irkutsk, Asia/Jakarta, Asia/Jayapura, Asia/Jerusalem, Asia/Kabul, Asia/Kamchatka, Asia/Karachi, Asia/Kashgar, Asia/Kathmandu, Asia/Katmandu, Asia/Khandyga, Asia/Kolkata, Asia/Krasnoyarsk, Asia/Kuala_Lumpur, Asia/Kuching, Asia/Kuwait, Asia/Macau, Asia/Magadan, Asia/Makassar, Asia/Manila, Asia/Muscat, Asia/Nicosia, Asia/Novokuznetsk, Asia/Novosibirsk, Asia/Omsk, Asia/Oral, Asia/Phnom_Penh, Asia/Pontianak, Asia/Pyongyang, Asia/Qatar, Asia/Qyzylorda, Asia/Rangoon, Asia/Riyadh, Asia/Sakhalin, Asia/Samarkand, Asia/Seoul, Asia/Shanghai, Asia/Singapore, Asia/Taipei, Asia/Tashkent, Asia/Tbilisi, Asia/Tehran, Asia/Thimphu, Asia/Tokyo, Asia/Ulaanbaatar, Asia/Urumqi, Asia/Ust-Nera, Asia/Vientiane, Asia/Vladivostok, Asia/Yakutsk, Asia/Yekaterinburg, Asia/Yerevan, Atlantic/Azores, Atlantic/Bermuda, Atlantic/Canary, Atlantic/Cape_Verde, Atlantic/Faroe, Atlantic/Madeira, Atlantic/Reykjavik, Atlantic/South_Georgia, Atlantic/St_Helena, Atlantic/Stanley, Australia/Adelaide, Australia/Brisbane, Australia/Broken_Hill, Australia/Currie, Australia/Darwin, Australia/Eucla, Australia/Hobart, Australia/Lindeman, Australia/Lord_Howe, Australia/Melbourne, Australia/Perth, Australia/Sydney, Europe/Amsterdam, Europe/Andorra, Europe/Athens, Europe/Belgrade, Europe/Berlin, Europe/Bratislava, Europe/Brussels, Europe/Bucharest, Europe/Budapest, Europe/Busingen, Europe/Chisinau, Europe/Copenhagen, Europe/Dublin, Europe/Gibraltar, Europe/Guernsey, Europe/Helsinki, Europe/Isle_of_Man, Europe/Istanbul, Europe/Jersey, Europe/Kaliningrad, Europe/Kiev, Europe/Lisbon, Europe/Ljubljana, Europe/London, Europe/Luxembourg, Europe/Madrid, Europe/Malta, Europe/Mariehamn, Europe/Minsk, Europe/Monaco, Europe/Moscow, Europe/Oslo, Europe/Paris, Europe/Podgorica, Europe/Prague, Europe/Riga, Europe/Rome, Europe/Samara, Europe/San_Marino, Europe/Sarajevo, Europe/Simferopol, Europe/Skopje, Europe/Sofia, Europe/Stockholm, Europe/Tallinn, Europe/Tirane, Europe/Uzhgorod, Europe/Vaduz, Europe/Vatican, Europe/Vienna, Europe/Vilnius, Europe/Volgograd, Europe/Warsaw, Europe/Zagreb, Europe/Zaporozhye, Europe/Zurich, GMT, Indian/Antananarivo, Indian/Chagos, Indian/Christmas, Indian/Cocos, Indian/Comoro, Indian/Kerguelen, Indian/Mahe, Indian/Maldives, Indian/Mauritius, Indian/Mayotte, Indian/Reunion, Pacific/Apia, Pacific/Auckland, Pacific/Chatham, Pacific/Chuuk, Pacific/Easter, Pacific/Efate, Pacific/Enderbury, Pacific/Fakaofo, Pacific/Fiji, Pacific/Funafuti, Pacific/Galapagos, Pacific/Gambier, Pacific/Guadalcanal, Pacific/Guam, Pacific/Honolulu, Pacific/Johnston, Pacific/Kiritimati, Pacific/Kosrae, Pacific/Kwajalein, Pacific/Majuro, Pacific/Marquesas, Pacific/Midway, Pacific/Nauru, Pacific/Niue, Pacific/Norfolk, Pacific/Noumea, Pacific/Pago_Pago, Pacific/Palau, Pacific/Pitcairn, Pacific/Pohnpei, Pacific/Ponape, Pacific/Port_Moresby, Pacific/Rarotonga, Pacific/Saipan, Pacific/Tahiti, Pacific/Tarawa, Pacific/Tongatapu, Pacific/Truk, Pacific/Wake, Pacific/Wallis )
The reason localTimeZone is not included in the list is that your local time zone is showing an older name that's only supported for backward compatibility. The semi-official list of time zones is maintained by IANA. Their format is generally Continent/City but they support older names for compatibility. Unlike API calls, older names are not in any sense deprecated. They're not current, but still completely valid. If your local time zone is US/Pacific, the current official name for the zone is America/Los_Angeles, which does appear in the list. Based on your results it would appear that knownTimeZoneNames only lists current names. Why iOS is giving you an older name isn't something I can answer, but I do know that it's common. To match them up, you have a couple of options: Run through known time zones and exhaustively compare the zone data attribute to find one that's equivalent. Yeah, ugly. Get the IANA data. It includes a file called backward that maps old names to new names. Include that file in your project. Then, if you get a zone name not found in the "known" list, consult the backward compatibility list to get the current name. I wouldn't recommend #eipipuz's approach. It seems to work, but the problem with abbreviations is that they're not globally unique. Known abbreviations may vary depending on the user's locale (for example, more than one place as "EST" for its Eastern time zone). As a result some "common" abbreviations may have different definitions in different places, or simply have no definition.
You can use the dictionary described in this question: GMT timezone conversion in objective c. Makes it pretty simple since you have the key. Hold on a second, the problem is that you are going to have multiple entries that apply given only the code. What you have is not enough information. This question is pretty close: iPhone NSTimeZone: localTimeZone confusion to your observation.
I think the answer is: NSString *known = #"US/Pacific" NSString *abbr = [[NSTimeZone timeZoneWithName:known] abbreviation]; NSString *expected = [[NSTimeZone abbreviationDictionary] objectForKey:abbr];
how to get timezone from a calendar
I am trying to get the timezone from native calendar using the following code but i am getting the timezone has Asia/Calcutta instead of just 'IST' Calendar calendarLocal = Calendar.getInstance(); // fetches time zone TimeZone timeZone = calendarLocal.getTimeZone(); System.out.println("Time Zone getAvailableIDs() --->"+timeZone.getAvailableIDs()); String[] x=timeZone.getAvailableIDs(); for(int i=0;i<x.length;i++){ System.out.println("Time Zone IDs-->"+x[i]); } System.out.println("Time Zone ID--->"+timeZone.getID()); System.out.println(" Calender Default-------->>>"+timeZone.getDefault()); System.out.println("Time Zone --->"+timeZone.getTimeZone(timeZone.getID())); Here TimeZone is Asia/Calcutta i need it to print IST
BlackBerry Java doesn't give you the time zone short codes, at least not reliably (it only gaurantees to know about the "GMT" code). You can see my answer here for information about how to code a mapping between strings like "Asia/Calcutta" and "IST". (my method mapTimeZoneCodes() in that example) I provide a template method for setting up the mapping, and a link to this article on Desktop Java, which seems to have a pretty complete list of the time zone codes, and how to map codes to the long Java time zone strings. It will be boring work to copy the strings into my template, but once you have it, you'll be able to easily lookup the short code based on the long name: String longName = timeZone.toString(); String shortCode = (String)_timeZones.get(longName);
Posting date issue due to time zones and the use of SystemDateGet()
Summary We are experiencing a problem where the systemDateGet() function is returning the AOS wher the local date is required when determining the date for posting purposes. Details We have branches around the world, both sides of the international date line, with users connecting to local terminal servers with the appropriate time zone settings for the user's branch. Each branch is associated with a different company, which has been configured with the correct time zone. We run a single AOS with the time zone setting set for the head office. There is not an option to introduce additional AOS's. The SystemDateGet() function is returning the AOS date as the user is not changing their Axapta session date. A number of system fields in the database related to posting dates are DATE based and not UTCDATETIME based. We are running AX2009 SP1 RU7. Kernel version 5.0.1500.4570 Application version 5.0.1500.4570 Localization version: Brazil, China, Japan, Thailand, India I am aware that the SystemDateGet() function was designed to return the AOS date unless the user changes their session date in which case that date is returned. Each user has the appropriate time zone setting in there user profile. Problem One example of the problem is when a user attempts to post a journal involving financial transactions, where the ledger period is checked to see if it is open. For example, the user is in England attempting to post a journal at 3:00pm on the 30st of November, local time, the standard Axapta code uses the systemDateGet() function to determine the date to use in the validation (determining if the period is open). In our case, the AOS is based in Brisbane Australia and the systemDateGet() function is returning the 1st of December (local time 1:00am on the 1st of December). Another example of the problem is where an invoice is posted in the United States on a Friday and the day of the week where the AOS is situated is a Saturday. We need the system to record the local date. Question Besides rewriting all system code involving systemDateGet(), over 2000 entities, is there any other options that can be used to get around the problem of getting the correct local date? Solution limitations. In the example given above of the ledger period being closed, it is not possible from a business practices standpoint to open the next period before end of month processing has been completed. There is currently no option for the purchase of additional AOS's.
Create a function in the Global class: static date systemDateGetLocal() { return DateTimeUtil::date(DateTimeUtil::applyTimeZoneOffset(DateTimeUtil::utcNow(), DateTimeUtil::getUserPreferredTimeZone())); } Then in Info.watchDog() do a: systemDateSet(systemDateGetLocal()); This may only be a partial solution, the watchDog is executed on the client side only.
Here is a quick update. Let me know if there are any issues or situations that need to be addressed. USING LOCAL TIME Introduction: The following is a work in progress update, as the solution has yet to be fully tested in all situations. Problem: If the user has a different time zone to the AOS, the timeNow() and systemDateGet() functions are returning the AOS details when the local date time is required. Clarifiers: When the local date time is changed within Axapta, the systemDateGet() function will return the local date, however the timeNow() function still returns the AOS time. Coding changes: A number of coding changes have been made to handle a number of different situations. Comments will be added where an explanation may be required. The brackets were changed to { and } to allow this to be posted. CLASS:GLOBAL One requirement I was given was to allow the system to handle multiple sites within a company that may have different time zones. Presently this functionality is not required. static server void setSessionDateTime( inventSiteId inventSiteId = '', utcDateTime reference = dateTimeUtil::utcNow()) { str sql; sqlStatementExecutePermission perm; connection conn = new UserConnection(); timeZone timeZone; int ret; ; if (inventSiteId) { timeZone = inventSite::find(inventSiteId).Timezone; } else { timeZone = dateTimeUtil::getCompanyTimeZone(); } //This is to get around the kernel validation of changing timezones //when the user has more than one session open. sql = strfmt("Update userInfo set preferredTimeZone = %1 where userInfo.id = '%2'", enum2int(timeZone), curUserId()); perm = new SQLStatementExecutePermission(sql); perm.assert(); ret = conn.createStatement().executeUpdate(sql); dateTimeUtil::setUserPreferredTimeZone(timeZone); dateTimeUtil::setSystemDateTime(reference); CodeAccessPermission::revertAssert(); } static int localTime() { utcDateTime tmp; ; setSessionDateTime(); tmp = dateTimeUtil::applyTimeZoneOffset( dateTimeUtil::utcNow(), dateTimeUtil::getCompanyTimeZone()); return dateTimeUtil::time(tmp); } The following method was implemented as a cross check to ensure that systemDateGet() returns the expected value. static date localDate() { utcDateTime tmp; ; setSessionDateTime(); tmp = dateTimeUtil::applyTimeZoneOffset( dateTimeUtil::utcNow(), dateTimeUtil::getCompanyTimeZone()); return dateTimeUtil::date(tmp); } CLASS:APPLICATION Modify the method setDefaultCompany. Add the line setSessionDateTime(); directly after the super call. This is to allow the time to change when the user changes company (another requirement I was given). CLASS:INFO So that the system uses the correct date/time from the start of the session. void startupPost() { ; setSessionDateTime(); } Modify the method canViewAlertInbox() adding the line setSessionDateTime(); as the first line. This is to handle if the user has multiple forms open for different companies. Localization dependent changes: Depending on your service pack and localizations, you will need to change a function of objects to use the localTime() function, replacing timeNow(). IMPORTANT NOTE: Do not change the class BatchRun to use the new localTime function as this will stop it working correctly. In our system there were around 260 instances that could be changed. If you do not use all modules and localizations the actual number of lines you need to change will be less. Final note: There are a number of today() calls in the code. I have not yet gone through each line to ensure it is coded correctly, i.e. using today() instead of systemDateGet(). Known issues: I have come across a situation where the timezone change function did not work completely as expected. This was when one session was doing a database synchronisation and another session was opened in a different company. As normal users will never be able to do this, I have not spent much time on its solution at this stage. It is something I do intend to resolve.