@Test public void testTimeZoneCST() throws Exception { DateFormat df; Date d; TimeZone tzCST = TimeZone.getTimeZone("CST"); TimeZone tzPST = TimeZone.getTimeZone("PST"); // displayTZ(tzCST); String date = "02-11-2013:05:01:45"; df = new SimpleDateFormat("dd-MM-yyyy:HH:mm:SS"); d = (Date) df.parse(date); // Read more: // http://javarevisited.blogspot.com/2011/09/step-by-step-guide-to-convert-string-to.html#ixzz2a0OnXQoi System.out.println(date + "'s offset; " + d.getTimezoneOffset()); System.out.println("CST offset is" + tzCST.getOffset(d.getTime())); System.out.println("PST offset is" + tzPST.getOffset(d.getTime())); date = "03-11-2013:00:01:45"; d = (Date) df.parse(date); System.out.println(date + "'s offset; " + d.getTimezoneOffset()); System.out.println("CST offset is" + tzCST.getOffset(d.getTime())); System.out.println("PST offset is" + tzPST.getOffset(d.getTime())); date = "03-11-2013:01:01:45"; d = (Date) df.parse(date); System.out.println(date + "'s offset; " + d.getTimezoneOffset()); System.out.println("CST offset is" + tzCST.getOffset(d.getTime())); System.out.println("PST offset is" + tzPST.getOffset(d.getTime())); System.out.println( "The gap is" + (tzCST.getOffset(d.getTime()) - tzPST.getOffset(d.getTime()))); date = "03-11-2013:15:01:45"; d = (Date) df.parse(date); System.out.println(date + "'s offset; " + d.getTimezoneOffset()); System.out.println("CST offset is" + tzCST.getOffset(d.getTime())); System.out.println("PST offset is" + tzPST.getOffset(d.getTime())); assertTrue(true); }
/** * Convert server date to local time according to browser timezone and format it according to * localized pattern. Time is always formatted to 24hr format. NB: This assumes that server runs * in UTC timezone. Otherwise we would need to adjust for server time offset as well. * * @param date * @return String */ public static String formatLocalDateTime(Date date) { Date convertedDate = new Date(date.getTime() - date.getTimezoneOffset()); final DateTimeFormat dateFormatter = DateTimeFormat.getShortDateFormat(); final DateTimeFormat timeFormatter = DateTimeFormat.getFormat("HH:mm"); String datePart = dateFormatter.format(convertedDate); String timePart = timeFormatter.format(convertedDate); return datePart + " " + timePart; }
/** @tests java.util.Date#Date(int, int, int, int, int, int) */ public void test_ConstructorIIIIII() { // Test for method java.util.Date(int, int, int, int, int, int) // the epoch + local time + (1 hour and 1 minute + 1 second) Date d1 = new Date(70, 0, 1, 1, 1, 1); // the epoch + local time + (1 hour and 1 minute + 1 second) Date d2 = new Date(0 + d1.getTimezoneOffset() * 60 * 1000 + 60 * 60 * 1000 + 60 * 1000 + 1000); assertTrue("Created incorrect date", d1.equals(d2)); }
/** @tests java.util.Date#Date(int, int, int) */ public void test_ConstructorIII() { // Test for method java.util.Date(int, int, int) Date d1 = new Date(70, 0, 1); // the epoch + local time // the epoch + local time Date d2 = new Date(0 + d1.getTimezoneOffset() * 60 * 1000); assertTrue("Created incorrect date", d1.equals(d2)); Date date = new Date(99, 5, 22); Calendar cal = new GregorianCalendar(1999, Calendar.JUNE, 22); assertTrue("Wrong time zone", date.equals(cal.getTime())); }
@SuppressWarnings("deprecation") @Test public void testDeserializeDate() throws Exception { String strDate = "1990-11-15T10:50:30.123Z"; DateSerializer dateSerializer = new DateSerializer(); Date date = dateSerializer.deserialize(new JsonPrimitive(strDate), Date.class, null); int year = 1990; int month = 11; int day = 15; int hour = 10; int minute = 50; int seconds = 30; assertEquals(year - 1900, date.getYear()); assertEquals(month - 1, date.getMonth()); assertEquals(day, date.getDate()); assertEquals(hour - date.getTimezoneOffset() / 60, date.getHours()); assertEquals(minute, date.getMinutes()); assertEquals(seconds, date.getSeconds()); }
/** Returns the timezone offset for the specified Date. */ @SuppressWarnings("deprecation") public static final long timezoneOffsetMillis(Date date) { return date.getTimezoneOffset() * 60 * 1000; }
@Override public String getTrueString(Locale locale) { Date d = new Date(2000000000000L); return SimpleDateFormat.getDateInstance(SimpleDateFormat.LONG, locale) .format(d.getTime() + (d.getTimezoneOffset() + 120) * 60 * 1000L); }
@Override protected Boolean doInBackground(Post... posts) { mErrorUnavailableVideoPress = false; mPost = posts[0]; mPostUploadNotifier = new PostUploadNotifier(mPost); String postTitle = TextUtils.isEmpty(mPost.getTitle()) ? getString(R.string.untitled) : mPost.getTitle(); String uploadingPostTitle = String.format(getString(R.string.posting_post), postTitle); String uploadingPostMessage = String.format( getString(R.string.sending_content), mPost.isPage() ? getString(R.string.page).toLowerCase() : getString(R.string.post).toLowerCase()); mPostUploadNotifier.updateNotificationMessage(uploadingPostTitle, uploadingPostMessage); mBlog = WordPress.wpDB.instantiateBlogByLocalId(mPost.getLocalTableBlogId()); if (mBlog == null) { mErrorMessage = mContext.getString(R.string.blog_not_found); return false; } // Create the XML-RPC client mClient = XMLRPCFactory.instantiate(mBlog.getUri(), mBlog.getHttpuser(), mBlog.getHttppassword()); if (TextUtils.isEmpty(mPost.getPostStatus())) { mPost.setPostStatus(PostStatus.toString(PostStatus.PUBLISHED)); } String descriptionContent = processPostMedia(mPost.getDescription()); String moreContent = ""; if (!TextUtils.isEmpty(mPost.getMoreText())) { moreContent = processPostMedia(mPost.getMoreText()); } mPostUploadNotifier.updateNotificationMessage(uploadingPostTitle, uploadingPostMessage); // If media file upload failed, let's stop here and prompt the user if (mIsMediaError) { return false; } JSONArray categoriesJsonArray = mPost.getJSONCategories(); String[] postCategories = null; if (categoriesJsonArray != null) { if (categoriesJsonArray.length() > 0) { mHasCategory = true; } postCategories = new String[categoriesJsonArray.length()]; for (int i = 0; i < categoriesJsonArray.length(); i++) { try { postCategories[i] = TextUtils.htmlEncode(categoriesJsonArray.getString(i)); } catch (JSONException e) { AppLog.e(T.POSTS, e); } } } Map<String, Object> contentStruct = new HashMap<String, Object>(); if (!mPost.isPage() && mPost.isLocalDraft()) { // add the tagline SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); if (prefs.getBoolean(getString(R.string.pref_key_post_sig_enabled), false)) { String tagline = prefs.getString(getString(R.string.pref_key_post_sig), ""); if (!TextUtils.isEmpty(tagline)) { String tag = "\n\n<span class=\"post_sig\">" + tagline + "</span>\n\n"; if (TextUtils.isEmpty(moreContent)) descriptionContent += tag; else moreContent += tag; } } } // Post format if (!mPost.isPage()) { if (!TextUtils.isEmpty(mPost.getPostFormat())) { contentStruct.put("wp_post_format", mPost.getPostFormat()); } } contentStruct.put("post_type", (mPost.isPage()) ? "page" : "post"); contentStruct.put("title", mPost.getTitle()); long pubDate = mPost.getDate_created_gmt(); if (pubDate != 0) { Date date_created_gmt = new Date(pubDate); contentStruct.put("date_created_gmt", date_created_gmt); Date dateCreated = new Date(pubDate + (date_created_gmt.getTimezoneOffset() * 60000)); contentStruct.put("dateCreated", dateCreated); } if (!TextUtils.isEmpty(moreContent)) { descriptionContent = descriptionContent.trim() + "<!--more-->" + moreContent; mPost.setMoreText(""); } // get rid of the p and br tags that the editor adds. if (mPost.isLocalDraft()) { descriptionContent = descriptionContent.replace("<p>", "").replace("</p>", "\n").replace("<br>", ""); } // gets rid of the weird character android inserts after images descriptionContent = descriptionContent.replaceAll("\uFFFC", ""); contentStruct.put("description", descriptionContent); if (!mPost.isPage()) { contentStruct.put("mt_keywords", mPost.getKeywords()); if (postCategories != null && postCategories.length > 0) { contentStruct.put("categories", postCategories); } } contentStruct.put("mt_excerpt", mPost.getPostExcerpt()); contentStruct.put((mPost.isPage()) ? "page_status" : "post_status", mPost.getPostStatus()); // Geolocation if (mPost.supportsLocation()) { JSONObject remoteGeoLatitude = mPost.getCustomField("geo_latitude"); JSONObject remoteGeoLongitude = mPost.getCustomField("geo_longitude"); JSONObject remoteGeoPublic = mPost.getCustomField("geo_public"); Map<Object, Object> hLatitude = new HashMap<Object, Object>(); Map<Object, Object> hLongitude = new HashMap<Object, Object>(); Map<Object, Object> hPublic = new HashMap<Object, Object>(); try { if (remoteGeoLatitude != null) { hLatitude.put("id", remoteGeoLatitude.getInt("id")); } if (remoteGeoLongitude != null) { hLongitude.put("id", remoteGeoLongitude.getInt("id")); } if (remoteGeoPublic != null) { hPublic.put("id", remoteGeoPublic.getInt("id")); } if (mPost.hasLocation()) { PostLocation location = mPost.getLocation(); if (!hLatitude.containsKey("id")) { hLatitude.put("key", "geo_latitude"); } if (!hLongitude.containsKey("id")) { hLongitude.put("key", "geo_longitude"); } if (!hPublic.containsKey("id")) { hPublic.put("key", "geo_public"); } hLatitude.put("value", location.getLatitude()); hLongitude.put("value", location.getLongitude()); hPublic.put("value", 1); } } catch (JSONException e) { AppLog.e(T.EDITOR, e); } if (!hLatitude.isEmpty() && !hLongitude.isEmpty() && !hPublic.isEmpty()) { Object[] geo = {hLatitude, hLongitude, hPublic}; contentStruct.put("custom_fields", geo); } } // featured image if (featuredImageID != -1) { contentStruct.put("wp_post_thumbnail", featuredImageID); } if (!TextUtils.isEmpty(mPost.getQuickPostType())) { mClient.addQuickPostHeader(mPost.getQuickPostType()); } contentStruct.put("wp_password", mPost.getPassword()); Object[] params; if (mPost.isLocalDraft()) params = new Object[] { mBlog.getRemoteBlogId(), mBlog.getUsername(), mBlog.getPassword(), contentStruct, false }; else params = new Object[] { mPost.getRemotePostId(), mBlog.getUsername(), mBlog.getPassword(), contentStruct, false }; try { EventBus.getDefault().post(new PostUploadStarted(mPost.getLocalTableBlogId())); if (mPost.isLocalDraft()) { Object object = mClient.call("metaWeblog.newPost", params); if (object instanceof String) { mPost.setRemotePostId((String) object); } } else { mClient.call("metaWeblog.editPost", params); } // Track any Analytics before modifying the post trackUploadAnalytics(); mPost.setLocalDraft(false); mPost.setLocalChange(false); WordPress.wpDB.updatePost(mPost); // request the new/updated post from the server to ensure local copy matches server ApiHelper.updateSinglePost( mBlog.getLocalTableBlogId(), mPost.getRemotePostId(), mPost.isPage()); return true; } catch (final XMLRPCException e) { setUploadPostErrorMessage(e); } catch (IOException e) { setUploadPostErrorMessage(e); } catch (XmlPullParserException e) { setUploadPostErrorMessage(e); } return false; }
@Override protected Boolean doInBackground(Post... posts) { mErrorUnavailableVideoPress = false; post = posts[0]; // add the uploader to the notification bar nm = (NotificationManager) SystemServiceFactory.get(context, Context.NOTIFICATION_SERVICE); String postOrPage = (String) (post.isPage() ? context.getResources().getText(R.string.page_id) : context.getResources().getText(R.string.post_id)); String message = context.getResources().getText(R.string.uploading) + " " + postOrPage; n = new Notification(R.drawable.notification_icon, message, System.currentTimeMillis()); Intent notificationIntent = new Intent(context, post.isPage() ? PagesActivity.class : PostsActivity.class); notificationIntent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER); notificationIntent.setData( (Uri.parse("custom://wordpressNotificationIntent" + post.getLocalTableBlogId()))); notificationIntent.putExtra(PostsActivity.EXTRA_VIEW_PAGES, post.isPage()); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, Intent.FLAG_ACTIVITY_CLEAR_TOP); n.setLatestEventInfo(context, message, message, pendingIntent); notificationID = (new Random()).nextInt() + post.getLocalTableBlogId(); nm.notify(notificationID, n); // needs a unique id Blog blog = WordPress.wpDB.instantiateBlogByLocalId(post.getLocalTableBlogId()); if (blog == null) { mErrorMessage = context.getString(R.string.blog_not_found); return false; } if (TextUtils.isEmpty(post.getPostStatus())) { post.setPostStatus("publish"); } Boolean publishThis = false; String descriptionContent = "", moreContent = ""; int moreCount = 1; if (!TextUtils.isEmpty(post.getMoreText())) moreCount++; String imgTags = "<img[^>]+android-uri\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>"; Pattern pattern = Pattern.compile(imgTags); for (int x = 0; x < moreCount; x++) { if (x == 0) descriptionContent = post.getDescription(); else moreContent = post.getMoreText(); Matcher matcher; if (x == 0) { matcher = pattern.matcher(descriptionContent); } else { matcher = pattern.matcher(moreContent); } List<String> imageTags = new ArrayList<String>(); while (matcher.find()) { imageTags.add(matcher.group()); } for (String tag : imageTags) { Pattern p = Pattern.compile("android-uri=\"([^\"]+)\""); Matcher m = p.matcher(tag); if (m.find()) { String imgPath = m.group(1); if (!imgPath.equals("")) { MediaFile mf = WordPress.wpDB.getMediaFile(imgPath, post); if (mf != null) { String imgHTML = uploadMediaFile(mf, blog); if (imgHTML != null) { if (x == 0) { descriptionContent = descriptionContent.replace(tag, imgHTML); } else { moreContent = moreContent.replace(tag, imgHTML); } } else { if (x == 0) descriptionContent = descriptionContent.replace(tag, ""); else moreContent = moreContent.replace(tag, ""); mIsMediaError = true; } } } } } } // If media file upload failed, let's stop here and prompt the user if (mIsMediaError) return false; JSONArray categoriesJsonArray = post.getJSONCategories(); String[] postCategories = null; if (categoriesJsonArray != null) { postCategories = new String[categoriesJsonArray.length()]; for (int i = 0; i < categoriesJsonArray.length(); i++) { try { postCategories[i] = TextUtils.htmlEncode(categoriesJsonArray.getString(i)); } catch (JSONException e) { AppLog.e(T.POSTS, e); } } } Map<String, Object> contentStruct = new HashMap<String, Object>(); if (!post.isPage() && post.isLocalDraft()) { // add the tagline SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); if (prefs.getBoolean("wp_pref_signature_enabled", false)) { String tagline = prefs.getString("wp_pref_post_signature", ""); if (!TextUtils.isEmpty(tagline)) { String tag = "\n\n<span class=\"post_sig\">" + tagline + "</span>\n\n"; if (TextUtils.isEmpty(moreContent)) descriptionContent += tag; else moreContent += tag; } } } // post format if (!post.isPage()) { if (!TextUtils.isEmpty(post.getPostFormat())) { contentStruct.put("wp_post_format", post.getPostFormat()); } } contentStruct.put("post_type", (post.isPage()) ? "page" : "post"); contentStruct.put("title", post.getTitle()); long pubDate = post.getDate_created_gmt(); if (pubDate != 0) { Date date_created_gmt = new Date(pubDate); contentStruct.put("date_created_gmt", date_created_gmt); Date dateCreated = new Date(pubDate + (date_created_gmt.getTimezoneOffset() * 60000)); contentStruct.put("dateCreated", dateCreated); } if (!moreContent.equals("")) { descriptionContent = descriptionContent.trim() + "<!--more-->" + moreContent; post.setMoreText(""); } // get rid of the p and br tags that the editor adds. if (post.isLocalDraft()) { descriptionContent = descriptionContent.replace("<p>", "").replace("</p>", "\n").replace("<br>", ""); } // gets rid of the weird character android inserts after images descriptionContent = descriptionContent.replaceAll("\uFFFC", ""); contentStruct.put("description", descriptionContent); if (!post.isPage()) { contentStruct.put("mt_keywords", post.getKeywords()); if (postCategories != null && postCategories.length > 0) contentStruct.put("categories", postCategories); } contentStruct.put("mt_excerpt", post.getPostExcerpt()); contentStruct.put((post.isPage()) ? "page_status" : "post_status", post.getPostStatus()); if (!post.isPage()) { if (post.getLatitude() > 0) { Map<Object, Object> hLatitude = new HashMap<Object, Object>(); hLatitude.put("key", "geo_latitude"); hLatitude.put("value", post.getLatitude()); Map<Object, Object> hLongitude = new HashMap<Object, Object>(); hLongitude.put("key", "geo_longitude"); hLongitude.put("value", post.getLongitude()); Map<Object, Object> hPublic = new HashMap<Object, Object>(); hPublic.put("key", "geo_public"); hPublic.put("value", 1); Object[] geo = {hLatitude, hLongitude, hPublic}; contentStruct.put("custom_fields", geo); } } // featured image if (featuredImageID != -1) { contentStruct.put("wp_post_thumbnail", featuredImageID); } XMLRPCClientInterface client = XMLRPCFactory.instantiate(blog.getUri(), blog.getHttpuser(), blog.getHttppassword()); if (!TextUtils.isEmpty(post.getQuickPostType())) { client.addQuickPostHeader(post.getQuickPostType()); } n.setLatestEventInfo(context, message, message, n.contentIntent); nm.notify(notificationID, n); contentStruct.put("wp_password", post.getPassword()); Object[] params; if (post.isLocalDraft() && !post.isUploaded()) params = new Object[] { blog.getRemoteBlogId(), blog.getUsername(), blog.getPassword(), contentStruct, publishThis }; else params = new Object[] { post.getRemotePostId(), blog.getUsername(), blog.getPassword(), contentStruct, publishThis }; try { if (post.isLocalDraft() && !post.isUploaded()) { Object newPostId = client.call("metaWeblog.newPost", params); if (newPostId instanceof String) { post.setRemotePostId((String) newPostId); } } else { client.call("metaWeblog.editPost", params); } post.setUploaded(true); post.setLocalChange(false); WordPress.wpDB.updatePost(post); return true; } catch (final XMLRPCException e) { setUploadPostErrorMessage(e); } catch (IOException e) { setUploadPostErrorMessage(e); } catch (XmlPullParserException e) { setUploadPostErrorMessage(e); } return false; }